Práctica

Librerías

# Poned las librerías que uséis aquí
library(readxl)
library(dplyr)
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
library(psych)
library(ggplot2)
## 
## Attaching package: 'ggplot2'
## The following objects are masked from 'package:psych':
## 
##     %+%, alpha
library(corrplot)
## corrplot 0.90 loaded
library(car)
## Loading required package: carData
## 
## Attaching package: 'car'
## The following object is masked from 'package:psych':
## 
##     logit
## The following object is masked from 'package:dplyr':
## 
##     recode

Introducción

Se pretende identificar ineficiencias en el proceso de venta o factores internos y externos que pueden estar impactando el rendimiento de las mismas de una empresa de dispositivos electrónicos para las franquicias de todo el país.

Las variables son las siguientes:

  1. Rentabieco = Rentabilidad económica
  2. Rentabifin = Rentabilidad financier
  3. Endp = Nivel de endeudamiento de las franquicias que venden estos dispositivos, valorado en euros
  4. Liq = Liquidez monetaria de las franquicias
  5. Productividad = ratio. Buscar la relación que puede tener con otras variables.
  6. Coe = cuota de mercado
  7. Edad = tiempo que llevan las franquicias operando
  8. Conce = número de entidades que dan este mismo servicio a nivel municipio
  9. Numac = nº accionistas
  10. Numpa = nº participados
  11. Numest = nº establecimientos por empresa
  12. Estp = nº establecimientos en otras provincias

Ejercicio 0

Teniendo en cuenta la descripción de cada variable, y los valores que véis en éstas, formatead correctamente el dataframe.

Se establece la carga del dataset desde un path relativo y no absoluto:

df <- readxl::read_excel("DatosPractica.xlsx")

Se establece una primera visión global de las variables presentes en el dataframe df:

glimpse(df)
## Rows: 4,403
## Columns: 18
## $ REGISTRO              <dbl> 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 1~
## $ PROVINCIA             <chr> "Albacete", "Albacete", "Albacete", "Albacete", ~
## $ rentabieco            <dbl> 0.859980, -4.747951, -0.322200, 12.989917, 1.460~
## $ rentabifin            <dbl> 8.395600, -20.148327, -1.934790, 28.382090, 55.7~
## $ endp                  <dbl> 89.75678, 76.43501, 83.34703, 54.23199, 97.37948~
## $ liq                   <dbl> 1.101604, 1.308301, 0.853852, 1.577194, 1.009258~
## $ PRODUCTIVIDAD         <dbl> 114.918892, 146.386673, 11.743305, 19.276188, 36~
## $ VENTAS                <dbl> 1269.829, 338.338, 17715.250, 20847.926, 1238.50~
## $ `NÚMERO DE EMPLEADOS` <dbl> 1, 1, 46, 40, 2, 54, 1, 2, 8, 2, 18, 1, 6, 4, 1,~
## $ coe                   <dbl> 0.0049253717, 0.0013123345, 0.0687133406, 0.0808~
## $ edad                  <dbl> 2, 8, 25, 24, 2, 40, 10, 11, 10, 15, 13, 10, 7, ~
## $ conce                 <dbl> 9, 9, 34, 34, 3, 34, 34, 34, 9, 34, 34, 34, 3, 3~
## $ numac                 <dbl> 1, 0, 3, 3, 0, 1, 1, 1, 3, 0, 4, 0, 2, 2, 0, 1, ~
## $ numpa                 <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 2, ~
## $ numest                <dbl> 1, 1, 2, 2, 2, 7, 1, 1, 1, 2, 2, 1, 1, 1, 1, 8, ~
## $ estp                  <dbl> 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, ~
## $ grupo                 <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ~
## $ fju                   <dbl> 0, 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, ~

Realizada esta primera visión, se decide el descarte de las variables existentes en el dataframe no susceptibles de análisis o uso según el enunciado completo de la práctica. Estas son, a saber: grupo y fju. Se elimina asimismo, REGISTRO por condiderarse no útil o significativa. Se toma la decisión de mantener el ‘NÚMERO DE EMPLEADOS’ por valorarse su a priori utilidad y relevancia:

df1 <- df %>% 
  select(-REGISTRO, -grupo, -fju)

Aunque no sea o fuere necesario, se valora como buena praxis el establecimiento de las variables como factor, formando parte del procedimiento inicial de preparación de los datos:

df1 %>% 
  mutate(across(where(is.character), as.factor))
## # A tibble: 4,403 x 15
##    PROVINCIA rentabieco rentabifin  endp   liq PRODUCTIVIDAD VENTAS
##    <fct>          <dbl>      <dbl> <dbl> <dbl>         <dbl>  <dbl>
##  1 Albacete       0.860       8.40  89.8 1.10         115.    1270.
##  2 Albacete      -4.75      -20.1   76.4 1.31         146.     338.
##  3 Albacete      -0.322      -1.93  83.3 0.854         11.7  17715.
##  4 Albacete      13.0        28.4   54.2 1.58          19.3  20848.
##  5 Albacete       1.46       55.7   97.4 1.01          37.0   1239.
##  6 Albacete       1.59        6.80  76.5 1.26          13.1  20071.
##  7 Albacete       9.97       31.7   68.5 0.588         12.0    273.
##  8 Albacete       4.38       11.3   61.3 0.943         70.8   1926.
##  9 Albacete       1.75       10.2   82.9 1.06           4.94   382.
## 10 Albacete       0.225      -1.57 114.  1.26           2.50   250.
## # ... with 4,393 more rows, and 8 more variables: NÚMERO DE EMPLEADOS <dbl>,
## #   coe <dbl>, edad <dbl>, conce <dbl>, numac <dbl>, numpa <dbl>, numest <dbl>,
## #   estp <dbl>

Se comprueba que todo esté en orden en el dataframe con la visión global del mismo y su comparativa con el estatus anterior:

glimpse(df1)
## Rows: 4,403
## Columns: 15
## $ PROVINCIA             <chr> "Albacete", "Albacete", "Albacete", "Albacete", ~
## $ rentabieco            <dbl> 0.859980, -4.747951, -0.322200, 12.989917, 1.460~
## $ rentabifin            <dbl> 8.395600, -20.148327, -1.934790, 28.382090, 55.7~
## $ endp                  <dbl> 89.75678, 76.43501, 83.34703, 54.23199, 97.37948~
## $ liq                   <dbl> 1.101604, 1.308301, 0.853852, 1.577194, 1.009258~
## $ PRODUCTIVIDAD         <dbl> 114.918892, 146.386673, 11.743305, 19.276188, 36~
## $ VENTAS                <dbl> 1269.829, 338.338, 17715.250, 20847.926, 1238.50~
## $ `NÚMERO DE EMPLEADOS` <dbl> 1, 1, 46, 40, 2, 54, 1, 2, 8, 2, 18, 1, 6, 4, 1,~
## $ coe                   <dbl> 0.0049253717, 0.0013123345, 0.0687133406, 0.0808~
## $ edad                  <dbl> 2, 8, 25, 24, 2, 40, 10, 11, 10, 15, 13, 10, 7, ~
## $ conce                 <dbl> 9, 9, 34, 34, 3, 34, 34, 34, 9, 34, 34, 34, 3, 3~
## $ numac                 <dbl> 1, 0, 3, 3, 0, 1, 1, 1, 3, 0, 4, 0, 2, 2, 0, 1, ~
## $ numpa                 <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 2, ~
## $ numest                <dbl> 1, 1, 2, 2, 2, 7, 1, 1, 1, 2, 2, 1, 1, 1, 1, 8, ~
## $ estp                  <dbl> 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, ~

Se comprueba si tenemos missings o no. En caso negativo no procede hacer nada. En caso afirmativo, realizaremos la búsqueda de en qué variables están presentes para ser tenidos en cuenta de aquí en adelante:

sum(is.na(df1)) # El resultado es cero. Negativo -> no procede hacer nada.
## [1] 0

Ejercicio 1

Análisis descriptivo. Estudiar la distribución de las variables, así como detectar posibles valores atípicos o relaciones

1. Rentabieco = Rentabilidad Económica

Se está ante una variable cuantitativa contínua.

Se establecen una serie de descriptivos que aportarán información relevante:

psych::describe(df1$rentabieco)
##    vars    n mean   sd median trimmed  mad    min   max  range  skew kurtosis
## X1    1 4403 0.76 13.4   1.77    2.08 3.52 -179.7 48.41 228.12 -4.43    38.89
##     se
## X1 0.2
summary(df1$rentabieco)
##      Min.   1st Qu.    Median      Mean   3rd Qu.      Max. 
## -179.7045    0.1294    1.7748    0.7648    4.8275   48.4145

Se representa gráficamente la variable de diferentes formas con el objetivo de extraer información de alguna o de todas ellas:

plot(df1$rentabieco, xlab = "Rentabilidad económica", ylab = "%", main = "Rentabilidad económica (rentabieco)")

Se realiza un gráfico de bigotes:

boxplot(df1$rentabieco, xlab = "Rentabilidad económica", ylab = "%", main = "Rentabilidad económica (rentabieco)")

En ggplot:

df1 %>% 
  ggplot(aes(rentabieco)) +
  labs(x = "Rentabilidad económica (%)", y = "") +
  geom_boxplot() + ggtitle("Rentabilidad económica (rentabieco)")

Se realiza un histograma:

hist(df1$rentabieco, xlab = "Rentabilidad económica (%)", ylab = "Cantidad", main = "Rentabilidad económica (rentabieco)")

En ggplot:

df1 %>% 
  ggplot(aes(rentabieco)) +
  labs(x = "Rentabilidad económica (%)", y = "Cantidad") +
  geom_histogram() + ggtitle("Rentabilidad económica (rentabieco)")
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

Como buena praxis y también para futuras posibles necesidades de análisis inferencial estadístico, se determina si la Rentabilidad Económica corresponde o no a una distribución normal:

shapiro.test(df1$rentabieco)
## 
##  Shapiro-Wilk normality test
## 
## data:  df1$rentabieco
## W = 0.62281, p-value < 2.2e-16

El valor p-value es menor a 2.2e-16 y por lo tanto < 0.05, por lo que no lo es.

Conclusiones importantes a destacar tras el análisis y estudio de la variable:

1.- Es importante tener claro desde el principo el concepto de Rentabilidad Económica: ésta será el ratio entre el beneficio bruto obtenido y lo invertido, expresado en %. Se puede lograr incrementarlo vendiendo con más margen (subiendo el precio de venta y/o bajando los costes de producción) o bien incrementando las ventas.

2.- Centrándose en la tendencia central y fijándose en la media y en la mediana (boxplot), se aprecian unos valores positivos de Rentabilidad Económica, comprendidos del 0.76 y el 1.77% respectivamente, con una dispersión marcada principalmente por una desviación estándar del 13.40%.

3.- Ahondando en la dispersión, el rango es extremadamente amplio, con su extremo de valores negativo destancado hasta un valor mínimo de -179.70%. Se tiene un máximo de 48.41%. Entre el primer y el tercer cuartil (rango intercuartil) tenemos el grueso de los valores, es decir, en porcertanjes comprendidos entre 0.13% y 4.83%.

4.- En lo referente a la forma, el hecho de que el sesgo o skew(ness) sea negativo (-4.43) nos indica que se presenta como una distribución asimétrica negativa, es decir, con una cola extendida hacia los valores negativos. Esto se aprecia también visuamente en las gráficas hilando con el punto anterior, en el que se constataba que en cuanto al rango el valor mínimo está muy alejado de la media en comparación al máximo. Este hecho se puede sumar a la gran distancia de primer cuartil (0.13 %) respecto a dicho mínimo, y la presencia de valores entre este mínimo y el primer cuartil.

5.- Siguiendo con la forma, respecto a la curtosis, cuyo valor es de 38.89, bastante mayor a 3 (el que establece el cambio de platicúrtica < 3 a mesocúrtica = 3), por lo que se está ante una distribución leptocúrtica. Los gráficos son bastante aclarativos por sí mismos en este aspecto.

6.- La distribución no corresponde a una normal.

7.- Valores atípicos: los outliers se pueden observar en valores más allá de los bigotes del diagrama Boxplot, tanto por la parte inferior Minimum, como por la superior Maximum. Se tendrá:

Q1 = quantile(df1$rentabieco, prob=c(0.25))
Q1
##      25% 
## 0.129383
Q3 = quantile(df1$rentabieco, prob=c(0.75))
Q3
##      75% 
## 4.827513
IQR = Q3 - Q1
Minimum = Q1 - 1.5 * IQR
Minimum
##       25% 
## -6.917813
Maximum = Q3 + 1.5 * IQR
Maximum
##      75% 
## 11.87471

Los outliers serán por lo tanto los porcentajes menores al Minimum < -6.92% y mayores al Maximum > 11.87%

2. Rentabifin = Rentabilidad Financiera

Se está ante una variable cuantitativa contínua.

Se establecen una serie de descriptivos que aportarán información relevante:

psych::describe(df1$rentabifin)
##    vars    n mean   sd median trimmed   mad     min    max  range skew kurtosis
## X1    1 4403 16.2 62.8  10.67   14.09 14.45 -459.48 494.18 953.66 0.16     18.7
##      se
## X1 0.95
summary(df1$rentabifin)
##     Min.  1st Qu.   Median     Mean  3rd Qu.     Max. 
## -459.480    2.658   10.671   16.198   24.988  494.178

Se representa gráficamente la variable de diferentes formas con el objetivo de extraer información de alguna o de todas ellas:

plot(df1$rentabifin, xlab = "Rentabilidad Financiera", ylab = "%", main = "Rentabilidad Financiera (rentabifin)")

Se realiza un gráfico de bigotes:

boxplot(df1$rentabifin, xlab = "Rentabilidad Financiera", ylab = "%", main = "Rentabilidad Financiera (rentabifin)")

En ggplot:

df1 %>% 
  ggplot(aes(rentabifin)) +
  labs(x = "Rentabilidad Financiera (%)", y = "") +
  geom_boxplot() + ggtitle("Rentabilidad Financiera (rentabifin)")

Se realiza un histograma:

hist(df1$rentabifin, xlab = "Rentabilidad Financiera (%)", ylab = "Cantidad", main = "Rentabilidad Financiera (rentabifin)")

En ggplot:

df1 %>% 
  ggplot(aes(rentabifin)) +
  labs(x = "Rentabilidad Financiera (%)", y = "Cantidad") +
  geom_histogram() + ggtitle("Rentabilidad Financiera (rentabifin)")
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

Como buena praxis y también para futuras posibles necesidades de análisis inferencial estadístico, se determina si la Rentabilidad Financiera corresponde o no a una distribución normal:

shapiro.test(df1$rentabifin)
## 
##  Shapiro-Wilk normality test
## 
## data:  df1$rentabifin
## W = 0.67036, p-value < 2.2e-16

El valor p-value es menor a 2.2e-16 y por lo tanto < 0.05, por lo que no lo es.

Conclusiones importantes a destacar tras el análisis y estudio de la variable:

1.- Es importante tener claro desde el principo el concepto de Rentabilidad Financiera: ésta será el ratio entre el beneficio neto obtenido (beneficio bruto descontando los intereses de lo invertido como préstamo) y lo invertido como recurso propio, no como préstamo, expresado en %. Se puede lograr incrementarlo si se acude al endeudamiento mediante préstamos.

2.- Centrándose en la tendencia central y fijándose en la mediana (boxplot) y en la media, se aprecian unos valores positivos de Rentabilidad Financiera, comprendidos del 10.67 y el 16.20% respectivamente, con una dispersión marcada principalmente por una desviación estándar del 62.80%.

3.- Ahondando en la dispersión, el rango es extremadamente amplio, su extremo negativo mínimo de -459.48% y un máximo de 494.18%. Entre el primer y el tercer cuartil (rango intercuartil) tenemos el grueso de los valores, es decir, en porcertanjes comprendidos entre 2.66% y 24.99%.

4.- En lo referente a la forma, el hecho de que el sesgo o skew(ness) sea ligeramente positivo (0.16) nos indica que se presenta como una distribución ligeramente asimétrica positiva, es decir, con una cola ligeramente extendida hacia los valores positivos. Esto se aprecia también visuamente en las gráficas hilando con el punto anterior, en el que se constataba que en cuanto al rango el valor mínimo y el máximo indican que se trata de una distribución bastante simétrica.

5.- Siguiendo con la forma, respecto a la curtosis, cuyo valor es de 18.70, sensiblemente mayor a 3 (el que establece el cambio de platicúrtica < 3 a mesocúrtica = 3), por lo que se está ante una distribución leptocúrtica. Los gráficos son bastante aclarativos por sí mismos en este aspecto.

6.- La distribución no corresponde a una normal.

7.- Valores atípicos: los outliers se pueden observar en valores más allá de los bigotes del diagrama Boxplot, tanto por la parte inferior Minimum, como por la superior Maximum. Se tendrá:

Q1 = quantile(df1$rentabifin, prob=c(0.25))
Q1
##      25% 
## 2.658328
Q3 = quantile(df1$rentabifin, prob=c(0.75))
Q3
##     75% 
## 24.9881
IQR = Q3 - Q1
Minimum = Q1 - 1.5 * IQR
Minimum
##       25% 
## -30.83633
Maximum = Q3 + 1.5 * IQR
Maximum
##      75% 
## 58.48276

Los outliers serán por lo tanto los porcentajes menores al Minimum < -30.84% y mayores al Maximum > 58.48%

3. Endp = Nivel de Endeudamiento (€)

Se está ante una variable cuantitativa contínua.

Se establecen una serie de descriptivos que aportarán información relevante:

psych::describe(df1$endp)
##    vars    n  mean    sd median trimmed   mad min    max  range skew kurtosis
## X1    1 4403 79.53 37.05  79.15   77.28 23.13   0 433.21 433.21 2.59    16.35
##      se
## X1 0.56
summary(df1$endp)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##    0.00   61.21   79.15   79.53   93.25  433.21

Se representa gráficamente la variable de diferentes formas con el objetivo de extraer información de alguna o de todas ellas:

plot(df1$endp, xlab = "Nivel de Endeudamiento", ylab = "%", main = "Nivel de Endeudamiento (endp)")

Se realiza un gráfico de bigotes:

boxplot(df1$endp, xlab = "Nivel de Endeudamiento", ylab = "€", main = "Nivel de Endeudamiento (endp)")

En ggplot:

df1 %>% 
  ggplot(aes(endp)) +
  labs(x = "Nivel de Endeudamiento (€)", y = "") +
  geom_boxplot() + ggtitle("Nivel de Endeudamiento (endp)")

Se realiza un histograma:

hist(df1$endp, xlab = "Nivel de Endeudamiento (€)", ylab = "Cantidad", main = "Nivel de Endeudamiento (endp)")

En ggplot:

df1 %>% 
  ggplot(aes(endp)) +
  labs(x = "Nivel de Endeudamiento (€)", y = "Cantidad") +
  geom_histogram() + ggtitle("Nivel de Endeudamiento (endp)")
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

Como buena praxis y también para futuras posibles necesidades de análisis inferencial estadístico, se determina si el Nivel de Endeudamiento corresponde o no a una distribución normal:

shapiro.test(df1$endp)
## 
##  Shapiro-Wilk normality test
## 
## data:  df1$endp
## W = 0.81696, p-value < 2.2e-16

El valor p-value es menor a 2.2e-16 y por lo tanto < 0.05, por lo que no lo es.

Conclusiones importantes a destacar tras el análisis y estudio de la variable:

1.- Es importante tener claro desde el principo el concepto de Nivel de Endeudamiento: éste a diferencia de otras variables algo más complejas es sencillo, se trata de lo que se debe, en este caso en euros.

2.- Centrándose en la tendencia central y fijándose en la mediana (boxplot) y en la media, se aprecian unos valores positivos de Nivel de Endeudamiento, de 79.15 y 79.53€ respectivamente, con una dispersión marcada principalmente por una desviación estándar de 37.05€.

3.- Ahondando en la dispersión, el rango es de 433.21€, su extremo negativo mínimo de 0€ y un máximo evidentemente como el rango, de 433.21€. Es decir, excepto para valores de 0€ el resto estará endeudado (valores todos ellos positivos). Entre el primer y el tercer cuartil (rango intercuartil) tenemos el grueso de los valores, es decir, en valores comprendidos entre 61.21 y 93.25€.

4.- En lo referente a la forma, el hecho de que el sesgo o skew(ness) sea positivo (2.59) nos indica que se presenta como una distribución asimétrica positiva, es decir, con una cola extendida hacia los valores positivos. Esto se aprecia también visuamente en las gráficas hilando con el punto anterior, con mayor distancia, en lo referente a valores, desde la mediana hasta los valores máximos que hacia el mínimo (cero).

5.- Siguiendo con la forma, respecto a la curtosis, cuyo valor es de 16.35, sensiblemente mayor a 3 (el que establece el cambio de platicúrtica < 3 a mesocúrtica = 3), por lo que se está ante una distribución leptocúrtica. Los gráficos son bastante aclarativos por sí mismos en este aspecto.

6.- La distribución no corresponde a una normal.

7.- Valores atípicos: los outliers se pueden observar en valores más allá de los bigotes del diagrama Boxplot, tanto por la parte inferior Minimum, como por la superior Maximum. Se tendrá:

Q1 = quantile(df1$endp, prob=c(0.25))
Q1
##      25% 
## 61.20817
Q3 = quantile(df1$endp, prob=c(0.75))
Q3
##      75% 
## 93.24837
IQR = Q3 - Q1
Minimum = Q1 - 1.5 * IQR
Minimum
##      25% 
## 13.14786
Maximum = Q3 + 1.5 * IQR
Maximum
##      75% 
## 141.3087

Los outliers serán por lo tanto los valores menores al Minimum < 13.15€ y mayores al Maximum > 141.31€

4. Liq = Liquidez Monetaria

Se está ante una variable cuantitativa contínua.

Se establecen una serie de descriptivos que aportarán información relevante:

psych::describe(df1$liq)
##    vars    n mean   sd median trimmed mad  min    max  range  skew kurtosis
## X1    1 4403 1.91 5.08   1.15    1.26 0.4 0.02 113.15 113.14 14.24   250.15
##      se
## X1 0.08
summary(df1$liq)
##      Min.   1st Qu.    Median      Mean   3rd Qu.      Max. 
##   0.01527   0.94691   1.15317   1.90566   1.54464 113.15031

Se representa gráficamente la variable de diferentes formas con el objetivo de extraer información de alguna o de todas ellas:

plot(df1$liq, xlab = "Liquidez Monetaria", ylab = "Índice", main = "Liquidez Monetaria (liq)")

Se realiza un gráfico de bigotes:

boxplot(df1$liq, xlab = "Liquidez Monetaria", ylab = "Índice", main = "Liquidez Monetaria (liq)")

En ggplot:

df1 %>% 
  ggplot(aes(liq)) +
  labs(x = "Liquidez Monetaria (Índice)", y = "") +
  geom_boxplot() + ggtitle("Liquidez Monetaria (liq)")

Se realiza un histograma:

hist(df1$liq, xlab = "Liquidez Monetaria (Índice)", ylab = "Cantidad", main = "Liquidez Monetaria (liq)")

En ggplot:

df1 %>% 
  ggplot(aes(liq)) +
  labs(x = "Liquidez Monetaria (Índice)", y = "Cantidad") +
  geom_histogram() + ggtitle("Liquidez Monetaria (liq)")
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

Como buena praxis y también para futuras posibles necesidades de análisis inferencial estadístico, se determina si la Liquidez Monetaria corresponde o no a una distribución normal:

shapiro.test(df1$liq)
## 
##  Shapiro-Wilk normality test
## 
## data:  df1$liq
## W = 0.17047, p-value < 2.2e-16

El valor p-value es menor a 2.2e-16 y por lo tanto < 0.05, por lo que no lo es.

Conclusiones importantes a destacar tras el análisis y estudio de la variable:

1.- Es importante tener claro desde el principo el concepto de Liquidez Monetaria: proporciona la idea de con cuanta rapidez puede una organización disponer de dinero en efectivo. A modo de ejemplo, un depósito en una entidad bancaria implica una gran liquidez a la hora de disponer de ese dinero y un inmueble una menor liquidez (su venta implica un proceso que lo alargará en el tiempo, no es inmediato). Cuando el índice está por encima de 1 la compañía presenta una buena liquidez, cuando es menor a 1 problemas de liquidez. A mayor distancia respecto a 1 mejor o peor grado de liquidez.

2.- Centrándose en la tendencia central y fijándose en la mediana (boxplot) y en la media, se aprecian unos valores positivos de Liquidez Monetaria, de 1.15 y 1.91 respectivamente, con una dispersión marcada principalmente por una desviación estándar de 5.08.

3.- Ahondando en la dispersión, el rango es de 113.14€, su extremo negativo mínimo de 0.02 y un máximo evidentemente similar el rango, de 113.15. Entre el primer y el tercer cuartil (rango intercuartil) tenemos el grueso de los valores, es decir, en valores comprendidos entre 0.95 y 1.54. Con estos datos, se puede ver que ese grueso está en valores de liquidez “neutros” (muy entorno al 1) pero que los mínimos están muy cercanos al cero, es decir, presentan una liquidez extremadamente mala y el valor máximo muy superir a 1 indica que presentan unos grados de liquidez extraordinariamente buenos.

4.- En lo referente a la forma, el hecho de que el sesgo o skew(ness) sea positivo (14.24) nos indica que se presenta como una distribución asimétrica bastante positiva, es decir, con una cola extendida hacia valores muy positivos. Esto se aprecia también visuamente en las gráficas hilando con el punto anterior, con mayor distancia, en lo referente a valores, desde la mediana hasta los valores máximos que hacia el mínimo (cero). Es decir, existen casos significativos con una muy buena liquidez.

5.- Siguiendo con la forma, respecto a la curtosis, cuyo valor es de 250.15, extremadamente superior a 3 (el que establece el cambio de platicúrtica < 3 a mesocúrtica = 3), por lo que se está ante una distribución leptocúrtica muy marcada. Los gráficos son bastante aclarativos por sí mismos en este aspecto.

6.- La distribución no corresponde a una normal.

7.- Valores atípicos: los outliers se pueden observar en valores más allá de los bigotes del diagrama Boxplot, tanto por la parte inferior Minimum, como por la superior Maximum. Se tendrá:

Q1 = quantile(df1$liq, prob=c(0.25))
Q1
##      25% 
## 0.946906
Q3 = quantile(df1$liq, prob=c(0.75))
Q3
##      75% 
## 1.544635
IQR = Q3 - Q1
Minimum = Q1 - 1.5 * IQR
Minimum
##        25% 
## 0.05031179
Maximum = Q3 + 1.5 * IQR
Maximum
##     75% 
## 2.44123

Los outliers serán por lo tanto los índices menores al Minimum < 0.05 y mayores al Maximum > 2.44

5. PRODUCTIVIDAD = Ratio de Productividad

Se está ante una variable cuantitativa contínua.

Se establecen una serie de descriptivos que aportarán información relevante:

psych::describe(df1$PRODUCTIVIDAD)
##    vars    n  mean   sd median trimmed  mad   min    max  range skew kurtosis
## X1    1 4403 16.22 20.2  11.76   12.47 10.1 -1.17 268.59 269.76 4.89    36.94
##     se
## X1 0.3
summary(df1$PRODUCTIVIDAD)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##  -1.172   5.085  11.755  16.224  18.783 268.593

Se representa gráficamente la variable de diferentes formas con el objetivo de extraer información de alguna o de todas ellas:

plot(df1$PRODUCTIVIDAD, xlab = "Productividad", ylab = "Ratio", main = "Productividad (PRODUCTIVIDAD)")

Se realiza un gráfico de bigotes:

boxplot(df1$PRODUCTIVIDAD, xlab = "Productividad", ylab = "Ratio", main = "Productividad (PRODUCTIVIDAD)")

En ggplot:

df1 %>% 
  ggplot(aes(PRODUCTIVIDAD)) +
  labs(x = "Productividad (Ratio)", y = "") +
  geom_boxplot() + ggtitle("Productividad (PRODUCTIVIDAD)")

Se realiza un histograma:

hist(df1$PRODUCTIVIDAD, xlab = "Productividad (Ratio)", ylab = "Cantidad", main = "Productividad (PRODUCTIVIDAD)")

En ggplot:

df1 %>% 
  ggplot(aes(PRODUCTIVIDAD)) +
  labs(x = "Productividad (Ratio)", y = "Cantidad") +
  geom_histogram() + ggtitle("Productividad (PRODUCTIVIDAD)")
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

Como buena praxis y también para futuras posibles necesidades de análisis inferencial estadístico, se determina si la el Ratio de Productividad corresponde o no a una distribución normal:

shapiro.test(df1$PRODUCTIVIDAD)
## 
##  Shapiro-Wilk normality test
## 
## data:  df1$PRODUCTIVIDAD
## W = 0.58933, p-value < 2.2e-16

El valor p-value es menor a 2.2e-16 y por lo tanto < 0.05, por lo que no lo es.

Conclusiones importantes a destacar tras el análisis y estudio de la variable:

1.1.- Es importante tener claro desde el principo el concepto de Productividad: en este caso se trata del Ratio de Productividad, es decir, aquel que proporcionan las Ventas Betas entre en Número de Empleados. Existen por lo tanto RELACIÓN con estas dos varibles, VENTAS y NÚMERO DE EMPLEADOS, que son dos de las variables de nuestros Datos, haciendo mención del hecho de que nuestra variable VENTAS hace referencia a aquella considerada como Ventas Brutas. Por lo tanto, tendiendo Ventas Netas = Ventas Brutas - (devoluciones a clientes + descuentos a clientes + bonificaciones a clientes), se tiene la relación Ventas Netas = VENTAS - XClientes. Así, PRODUCTIVIDAD = Ventas Netas / NÚMERO DE EMPLEADOS = (VENTAS - XClientes) / NÚMERO DE EMPLEADOS, por lo que PRODUCTIVIDAD * NÚMERO DE EMPLEADOS = VENTAS - XClientes. Se concluye por lo tanto, XClientes = VENTAS - PRODUCTIVIDAD * NÚMERO DE EMPLEADOS.

1.2.- Hilando con el punto 1.1. y siguiento con su argumentación, se considera que se debe añadir una nueva e importante variable: el porcentaje en % de gasto XCliente con respecto a las Ventas Brutas (VENTAS), es decir, PORCENTAJE GASTO POR CLIENTE = (XClientes / VENTAS) * 100 = ((VENTAS - PRODUCTIVIDAD * NÚMERO DE EMPLEADOS) / VENTAS) * 100. De esta forma se tiene el % de lo que cada una gasta en los cliente,s como política de empresa, respecto a sus VENTAS (Ventas Brutas).

PORCENTAJE_GASTO_CLIENTES = ((df1$VENTAS - (df1$PRODUCTIVIDAD * df1$`NÚMERO DE EMPLEADOS`))/df1$VENTAS) * 100
df2 <- df1 %>% 
  mutate(
    PORCENTAJE_GASTO_CLIENTES
  )
glimpse(df2)
## Rows: 4,403
## Columns: 16
## $ PROVINCIA                 <chr> "Albacete", "Albacete", "Albacete", "Albacet~
## $ rentabieco                <dbl> 0.859980, -4.747951, -0.322200, 12.989917, 1~
## $ rentabifin                <dbl> 8.395600, -20.148327, -1.934790, 28.382090, ~
## $ endp                      <dbl> 89.75678, 76.43501, 83.34703, 54.23199, 97.3~
## $ liq                       <dbl> 1.101604, 1.308301, 0.853852, 1.577194, 1.00~
## $ PRODUCTIVIDAD             <dbl> 114.918892, 146.386673, 11.743305, 19.276188~
## $ VENTAS                    <dbl> 1269.829, 338.338, 17715.250, 20847.926, 123~
## $ `NÚMERO DE EMPLEADOS`     <dbl> 1, 1, 46, 40, 2, 54, 1, 2, 8, 2, 18, 1, 6, 4~
## $ coe                       <dbl> 0.0049253717, 0.0013123345, 0.0687133406, 0.~
## $ edad                      <dbl> 2, 8, 25, 24, 2, 40, 10, 11, 10, 15, 13, 10,~
## $ conce                     <dbl> 9, 9, 34, 34, 3, 34, 34, 34, 9, 34, 34, 34, ~
## $ numac                     <dbl> 1, 0, 3, 3, 0, 1, 1, 1, 3, 0, 4, 0, 2, 2, 0,~
## $ numpa                     <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0,~
## $ numest                    <dbl> 1, 1, 2, 2, 2, 7, 1, 1, 1, 2, 2, 1, 1, 1, 1,~
## $ estp                      <dbl> 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,~
## $ PORCENTAJE_GASTO_CLIENTES <dbl> 90.95005, 56.73360, 96.95069, 96.30156, 94.0~

2.- Centrándose en la tendencia central y fijándose en la mediana (boxplot) y en la media, se aprecian unos valores positivos de Ratio de Productividad, de 11.76 y 16.22 respectivamente, con una dispersión marcada principalmente por una desviación estándar de 20.20.

3.- Ahondando en la dispersión, el rango es de 269.76, su extremo negativo mínimo de -1.17 y un máximo evidentemente similar el rango, de 268.59. Entre el primer y el tercer cuartil (rango intercuartil) tenemos el grueso de los valores, es decir, en valores comprendidos entre 5.08 y 18.78. Con estos datos, se puede ver que ese 50% está en valores de productividad positivos y que los mínimos están muy cercanos al cero, es decir, no presentan a priori una productividad extremadamente mala y existen valores máximo muy altos indicando que presentan unos grados de productividad extraordinariamente buenos.

4.- En lo referente a la forma, el hecho de que el sesgo o skew(ness) sea positivo (4.89) nos indica que se presenta como una distribución asimétrica positiva, es decir, con una cola extendida hacia valores positivos. Esto se aprecia también visuamente en las gráficas hilando con el punto anterior, con mayor distancia, en lo referente a valores, desde la mediana hasta los valores máximos que hacia los valores mínimos. Es decir, existen casos significativos con una muy buena productividad.

5.- Siguiendo con la forma, respecto a la curtosis, cuyo valor es de 36.94, muy superior a 3 (el que establece el cambio de platicúrtica < 3 a mesocúrtica = 3), por lo que se está ante una distribución leptocúrtica marcada. Los gráficos son bastante aclarativos por sí mismos en este aspecto.

6.- La distribución no corresponde a una normal.

7.- Valores atípicos: los outliers se pueden observar en valores más allá de los bigotes del diagrama Boxplot, tanto por la parte inferior Minimum, como por la superior Maximum. Se tendrá:

Q1 = quantile(df1$PRODUCTIVIDAD, prob=c(0.25))
Q1
##      25% 
## 5.084923
Q3 = quantile(df1$PRODUCTIVIDAD, prob=c(0.75))
Q3
##      75% 
## 18.78318
IQR = Q3 - Q1
Minimum = Q1 - 1.5 * IQR
Minimum
##       25% 
## -15.46246
Maximum = Q3 + 1.5 * IQR
Maximum
##      75% 
## 39.33056

Los outliers serán por lo tanto los ratios menores al Minimum < -15.46 y mayores al Maximum > 39.33

6. Coe = Cuota de Mercado

Se está ante una variable cuantitativa contínua.

Se establece una relación de % multiplicando por 100 coe para proporcionar una mejor visión de los datos, con una nueva variable a la que se le denominará coe_100:

df3 <- df2 %>% 
  mutate(
    coe_100 = coe * 100
  )
glimpse(df3)
## Rows: 4,403
## Columns: 17
## $ PROVINCIA                 <chr> "Albacete", "Albacete", "Albacete", "Albacet~
## $ rentabieco                <dbl> 0.859980, -4.747951, -0.322200, 12.989917, 1~
## $ rentabifin                <dbl> 8.395600, -20.148327, -1.934790, 28.382090, ~
## $ endp                      <dbl> 89.75678, 76.43501, 83.34703, 54.23199, 97.3~
## $ liq                       <dbl> 1.101604, 1.308301, 0.853852, 1.577194, 1.00~
## $ PRODUCTIVIDAD             <dbl> 114.918892, 146.386673, 11.743305, 19.276188~
## $ VENTAS                    <dbl> 1269.829, 338.338, 17715.250, 20847.926, 123~
## $ `NÚMERO DE EMPLEADOS`     <dbl> 1, 1, 46, 40, 2, 54, 1, 2, 8, 2, 18, 1, 6, 4~
## $ coe                       <dbl> 0.0049253717, 0.0013123345, 0.0687133406, 0.~
## $ edad                      <dbl> 2, 8, 25, 24, 2, 40, 10, 11, 10, 15, 13, 10,~
## $ conce                     <dbl> 9, 9, 34, 34, 3, 34, 34, 34, 9, 34, 34, 34, ~
## $ numac                     <dbl> 1, 0, 3, 3, 0, 1, 1, 1, 3, 0, 4, 0, 2, 2, 0,~
## $ numpa                     <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0,~
## $ numest                    <dbl> 1, 1, 2, 2, 2, 7, 1, 1, 1, 2, 2, 1, 1, 1, 1,~
## $ estp                      <dbl> 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,~
## $ PORCENTAJE_GASTO_CLIENTES <dbl> 90.95005, 56.73360, 96.95069, 96.30156, 94.0~
## $ coe_100                   <dbl> 0.49253717, 0.13123345, 6.87133406, 8.086426~

Se establecen una serie de descriptivos que aportarán información relevante:

psych::describe(df3$coe_100)
##    vars    n mean   sd median trimmed mad min  max range skew kurtosis   se
## X1    1 4403 1.18 2.59   0.21    0.56 0.3   0 50.6  50.6 5.46    54.42 0.04
summary(df3$coe_100)
##     Min.  1st Qu.   Median     Mean  3rd Qu.     Max. 
##  0.00012  0.04909  0.21491  1.18101  1.06936 50.60498

Se representa gráficamente la variable de diferentes formas con el objetivo de extraer información de alguna o de todas ellas:

plot(df3$coe_100, xlab = "Cuota de Mercado", ylab = "Índice", main = "Cuota de Mercado (coe)")

Se realiza un gráfico de bigotes:

boxplot(df3$coe_100, xlab = "Cuota de Mercado", ylab = "Índice", main = "Cuota de Mercado (coe)")

En ggplot:

df3 %>% 
  ggplot(aes(coe_100)) +
  labs(x = "Cuota de Mercado (Índice)", y = "") +
  geom_boxplot() + ggtitle("Cuota de Mercado (coe)")

Se realiza un histograma:

hist(df3$coe_100, xlab = "Cuota de Mercado (Índice)", ylab = "Cantidad", main = "Cuota de Mercado (coe)")

En ggplot:

df3 %>% 
  ggplot(aes(coe_100)) +
  labs(x = "Cuota de Mercado (Índice)", y = "Cantidad") +
  geom_histogram() + ggtitle("Cuota de Mercado (coe)")
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

Como buena praxis y también para futuras posibles necesidades de análisis inferencial estadístico, se determina si la Cuota de Mercado corresponde o no a una distribución normal:

shapiro.test(df3$coe_100)
## 
##  Shapiro-Wilk normality test
## 
## data:  df3$coe_100
## W = 0.47735, p-value < 2.2e-16

El valor p-value es menor a 2.2e-16 y por lo tanto < 0.05, por lo que no lo es.

Conclusiones importantes a destacar tras el análisis y estudio de la variable:

1.- Es importante tener claro desde el principo el concepto de Cuota de Mercado: será el porcentaje de ventas del producto para ese negocio en relación a las ventas globales de dicho producto.

2.- Centrándose en la tendencia central y fijándose en la mediana (boxplot) y en la media, se aprecian unos valores positivos de Cuota de Mercado, de 0.21 y 1.18 respectivamente, con una dispersión marcada principalmente por una desviación estándar de 2.59.

3.- Ahondando en la dispersión, el rango es de 50.60, su extremo negativo mínimo de 0.0001 y un máximo evidentemente como el rango, de 50.60. Entre el primer y el tercer cuartil (rango intercuartil) tenemos el grueso de los valores, es decir, en valores comprendidos entre 0.05 y 1.07. Con estos datos, se puede ver que ese grueso está en valores de cuota de mercado muy moderados pero que los mínimos están muy cercanos al cero, es decir, presentan una cuota de mercado muy pequeña (probablemente pequeños negocios de barrio que venden muy poquito) y los valores hacia el máximo son muy elevados indicando que probablemente sean grandes negocios con una cuota de mercado muy alta (venden muchísimo producto en esa zona).

4.- En lo referente a la forma, el hecho de que el sesgo o skew(ness) sea positivo (5.46) nos indica que se presenta como una distribución asimétrica bastante positiva, es decir, con una cola extendida hacia valores muy positivos. Esto se aprecia también visuamente en las gráficas hilando con el punto anterior, con mayor distancia, en lo referente a valores, desde la mediana hasta los valores máximos que hacia el mínimo (cero). Es decir, existen casos significativos con una muy buena cuota de mercado.

5.- Siguiendo con la forma, respecto a la curtosis, cuyo valor es de 54.42, muy superior a 3 (el que establece el cambio de platicúrtica < 3 a mesocúrtica = 3), por lo que se está ante una distribución leptocúrtica muy marcada. Los gráficos son bastante aclarativos por sí mismos en este aspecto.

6.- La distribución no corresponde a una normal.

7.- Valores atípicos: los outliers se pueden observar en valores más allá de los bigotes del diagrama Boxplot, tanto por la parte inferior Minimum, como por la superior Maximum. Se tendrá:

Q1 = quantile(df3$coe_100, prob=c(0.25))
Q1
##       25% 
## 0.0490925
Q3 = quantile(df3$coe_100, prob=c(0.75))
Q3
##      75% 
## 1.069363
IQR = Q3 - Q1
Minimum = Q1 - 1.5 * IQR
Minimum
##       25% 
## -1.481314
Maximum = Q3 + 1.5 * IQR
Maximum
##     75% 
## 2.59977

Los outliers serán por lo tanto las cuotas de mercado menores al Minimum < 0 (-1.48 carece de lógica) y mayores al Maximum > 2.60

7. Edad = Tiempo Operando en el Mercado

Se va a considerar a la edad como una variable cuantitativa contínua (existe un poco de controversia al respecto, pero es posible que sea de más utilidad considerarla contínua que discreta a efectos prácticos para este análisis).

Se establecen una serie de descriptivos que aportarán información relevante:

psych::describe(df3$edad)
##    vars    n  mean   sd median trimmed mad min max range skew kurtosis   se
## X1    1 4403 12.29 9.16     11   11.28 8.9   0  49    49 1.01     1.05 0.14
summary(df3$edad)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##    0.00    5.00   11.00   12.29   18.00   49.00

Se representa gráficamente la variable de diferentes formas con el objetivo de extraer información de alguna o de todas ellas:

plot(df3$edad, xlab = "Tiempo Operando", ylab = "Años", main = "Tiempo Operando (edad)")

Se realiza un gráfico de bigotes:

boxplot(df3$edad, xlab = "Tiempo Operando", ylab = "Años", main = "Tiempo Operando (edad)")

En ggplot:

df3 %>% 
  ggplot(aes(edad)) +
  labs(x = "Tiempo Operando (Años)", y = "") +
  geom_boxplot() + ggtitle("Tiempo Operando (edad)")

Se realiza un histograma:

hist(df3$edad, xlab = "Tiempo Operando (Años)", ylab = "Cantidad", main = "Tiempo Operando (edad)")

En ggplot:

df3 %>% 
  ggplot(aes(edad)) +
  labs(x = "Tiempo Operando (Años)", y = "Cantidad") +
  geom_histogram() + ggtitle("Tiempo Operando (edad)")
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

Como buena praxis y también para futuras posibles necesidades de análisis inferencial estadístico, se determina si el Tiempo Operando corresponde o no a una distribución normal:

shapiro.test(df3$edad)
## 
##  Shapiro-Wilk normality test
## 
## data:  df3$edad
## W = 0.92737, p-value < 2.2e-16

El valor p-value es menor a 2.2e-16 y por lo tanto < 0.05, por lo que no lo es.

Conclusiones importantes a destacar tras el análisis y estudio de la variable:

1.- Es importante tener claro desde el principo el concepto de Edad: en este caso es sencillo, es el tiempo que lleva operando la entidad, presuponiéndose en años.

2.- Centrándose en la tendencia central y fijándose en la mediana (boxplot) y en la media, se aprecian unos valores de Tiempo Operando, de 12.29 y 11 años respectivamente, con una dispersión marcada principalmente por una desviación estándar de 9.16 años.

3.- Ahondando en la dispersión, el rango es de 49 años, su extremo mínimo de 0 años y un máximo evidentemente igual el rango, de 49 años. Entre el primer y el tercer cuartil (rango intercuartil) tenemos el grueso de los valores, es decir, en valores comprendidos entre 5 y 18 años. Con estos datos, se puede ver que existen entidades que acaban de empezar: 0 años y otras que llevan un tiempo considerable operando.

4.- En lo referente a la forma, el hecho de que el sesgo o skew(ness) sea positivo (1.01) nos indica que se presenta como una distribución asimétrica positiva, es decir, con una cola extendida hacia valores positivos. Esto se aprecia también visuamente en las gráficas hilando con el punto anterior, con mayor distancia, en lo referente a valores, desde la mediana hasta los valores máximos que hacia el mínimo (cero). Es decir, existen casos significativos con alto tiempo operando.

5.- Siguiendo con la forma, respecto a la curtosis, cuyo valor es de 1.05, inferior a 3 (el que establece el cambio de platicúrtica < 3 a mesocúrtica = 3), por lo que se está ante una distribución platicúrtica. Los gráficos son bastante aclarativos por sí mismos en este aspecto.

6.- La distribución no corresponde a una normal.

7.- Valores atípicos: los outliers se pueden observar en valores más allá de los bigotes del diagrama Boxplot, tanto por la parte inferior Minimum, como por la superior Maximum. Se tendrá:

Q1 = quantile(df3$edad, prob=c(0.25))
Q1
## 25% 
##   5
Q3 = quantile(df3$edad, prob=c(0.75))
Q3
## 75% 
##  18
IQR = Q3 - Q1
Minimum = Q1 - 1.5 * IQR
Minimum
##   25% 
## -14.5
Maximum = Q3 + 1.5 * IQR
Maximum
##  75% 
## 37.5

Los outliers serán por lo tanto timpos operando en el mercado menores al Minimum < 0 años (-14.5 años carece de lógica) y mayores al Maximum > 37.5 años

8. Conce = Entidades Similares en el Municipio

Se va a considerar conce como una variable cuantitativa discreta:

table(df3$conce)
## 
##   1   2   3   4   5   6   7   8   9  10  11  12  13  14  15  16  17  18  19  20 
## 421 360 276 184 250 162 105 200 162  50  88  72 117  98  45  80  17  72 152  60 
##  21  22  24  25  26  28  29  30  31  32  33  34  35  38  40  42  46  49  60  61 
##  84  66  72  75  26  56  29  30  31  32  33  34  35  38  40  42  46  49  60  61 
##  63  66 149 215 
##  63  66 149 215
round(prop.table(table(df3$conce)) * 100, 2)
## 
##    1    2    3    4    5    6    7    8    9   10   11   12   13   14   15   16 
## 9.56 8.18 6.27 4.18 5.68 3.68 2.38 4.54 3.68 1.14 2.00 1.64 2.66 2.23 1.02 1.82 
##   17   18   19   20   21   22   24   25   26   28   29   30   31   32   33   34 
## 0.39 1.64 3.45 1.36 1.91 1.50 1.64 1.70 0.59 1.27 0.66 0.68 0.70 0.73 0.75 0.77 
##   35   38   40   42   46   49   60   61   63   66  149  215 
## 0.79 0.86 0.91 0.95 1.04 1.11 1.36 1.39 1.43 1.50 3.38 4.88

Demasiado rango y demasiados valores para sacar alguna conclusión coherente con el recurso de tablas de frecuencias. A partir de un número de entidades >= 29, éste coincide con el número de entidades en las que se produce: posible pero extraño.

Se establecen una serie de descriptivos que aportarán información relevante:

psych::describe(df3$conce)
##    vars    n mean    sd median trimmed   mad min max range skew kurtosis   se
## X1    1 4403 29.8 50.95     11   16.28 13.34   1 215   214 2.73     6.58 0.77
summary(df3$conce)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##     1.0     4.0    11.0    29.8    28.0   215.0

Se representa gráficamente la variable de diferentes formas con el objetivo de extraer información de alguna o de todas ellas:

plot(df3$conce, xlab = "Entidades Similares en el Municipio", ylab = "Número", main = "Entidades Similares en el Municipio (conce)")

Se realiza un gráfico de bigotes:

boxplot(df3$conce, xlab = "Entidades Similares en el Municipio", ylab = "Número", main = "Entidades Similares en el Municipio (conce)")

En ggplot:

df3 %>% 
  ggplot(aes(conce)) +
  labs(x = "Entidades Similares en el Municipio (Número)", y = "") +
  geom_boxplot() + ggtitle("Entidades Similares en el Municipio (conce)")

Se realiza un histograma:

hist(df3$conce, xlab = "Entidades Similares en el Municipio (Número)", ylab = "Cantidad", main = "Entidades Similares en el Municipio (conce)")

En ggplot:

df3 %>% 
  ggplot(aes(conce)) +
  labs(x = "Entidades Similares en el Municipio (Número)", y = "Cantidad") +
  geom_histogram() + ggtitle("Entidades Similares en el Municipio (conce)")
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

Como buena praxis y también para futuras posibles necesidades de análisis inferencial estadístico, se determina si las Entidades Similares en el Municipio corresponde o no a una distribución normal:

shapiro.test(df3$conce)
## 
##  Shapiro-Wilk normality test
## 
## data:  df3$conce
## W = 0.55731, p-value < 2.2e-16

El valor p-value es menor a 2.2e-16 y por lo tanto < 0.05, por lo que no lo es.

Conclusiones importantes a destacar tras el análisis y estudio de la variable:

1.- Es importante tener claro desde el principo el concepto de Conce: es el número de entidades similares presentes en ese municipio en el que opera la entidad.

2.- Centrándose en la tendencia central y fijándose en la mediana (boxplot) y en la media, se aprecian un número de Entidades Similares en el Municipio, de 11 y 29.8 entidades respectivamente, con una dispersión marcada principalmente por una desviación estándar de 50.95 entidades.

3.- Ahondando en la dispersión, el rango es de 214 entidades, su extremo mínimo de 1 entidad y un máximo evidentemente cercano al rango, de 215 entidades. Entre el primer y el tercer cuartil (rango intercuartil) tenemos el grueso de los valores, es decir, en valores comprendidos entre 4 y 28 entidades. Con estos datos, se puede ver que existen municipios con 1 entidad adicional y otros con 215. La diferencia es más que significativa. Llaman mucho la atención a priori, estos dos conjuntos de número de entidades altas en municipios. El sentido común podría hacernos pensar en ¿Madrid y Barcelona como provincias de dichos municipios como grandes focos poblacionales? Se analiza:

madrid_o_bcn <- df3 %>% 
  filter(
    PROVINCIA == "Madrid" | PROVINCIA == "Barcelona"
  )
madrid_o_bcn %>% 
  ggplot(aes(conce)) +
  labs(x = "Entidades Similares en el Municipio Madrid o BCN (Número)", y = "Cantidad") +
  geom_histogram() + ggtitle("Entidades Similares en el Municipioo Madrid o BCN (conce)")
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

glimpse(madrid_o_bcn)
## Rows: 1,019
## Columns: 17
## $ PROVINCIA                 <chr> "Barcelona", "Barcelona", "Barcelona", "Barc~
## $ rentabieco                <dbl> -3.830271, -2.003177, 6.821822, -28.781597, ~
## $ rentabifin                <dbl> -21.065254, -4.384339, 14.708571, 20.966486,~
## $ endp                      <dbl> 81.81712, 54.31064, 53.62009, 237.27431, 64.~
## $ liq                       <dbl> 0.826364, 1.325191, 1.840783, 0.271941, 1.55~
## $ PRODUCTIVIDAD             <dbl> 10.660412, 9.204866, 1.114885, 6.247975, 9.5~
## $ VENTAS                    <dbl> 11234.814, 2818.803, 527.305, 563.561, 30802~
## $ `NÚMERO DE EMPLEADOS`     <dbl> 48, 14, 7, 4, 81, 1, 13, 48, 88, 21, 24, 37,~
## $ coe                       <dbl> 2.707490e-03, 6.793065e-04, 1.270758e-04, 1.~
## $ edad                      <dbl> 9, 35, 16, 26, 17, 3, 9, 14, 39, 16, 21, 42,~
## $ conce                     <dbl> 17, 11, 2, 149, 8, 149, 149, 14, 149, 2, 21,~
## $ numac                     <dbl> 4, 4, 0, 0, 1, 0, 1, 2, 3, 2, 5, 1, 0, 2, 1,~
## $ numpa                     <dbl> 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,~
## $ numest                    <dbl> 2, 1, 1, 1, 6, 1, 1, 2, 4, 2, 2, 2, 1, 4, 1,~
## $ estp                      <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,~
## $ PORCENTAJE_GASTO_CLIENTES <dbl> 95.44541, 95.42827, 98.51998, 95.56536, 97.4~
## $ coe_100                   <dbl> 0.270749049, 0.067930648, 0.012707582, 0.013~

Se establece por lo tanto como conclusión que es lógico que puedan a presentarse un número alto de entidades similares en municipios de ambas provincias, dada su alta densidad de población.

4.- En lo referente a la forma, el hecho de que el sesgo o skew(ness) sea positivo (2.73) nos indica que se presenta como una distribución asimétrica positiva, es decir, con una cola extendida hacia valores positivos. Esto se aprecia también visuamente en las gráficas hilando con el punto anterior, con mayor distancia, en lo referente a valores, desde la mediana hasta los valores máximos que hacia el mínimo (uno). Es decir, existen municipios significativos con alto número de entidades similares.

5.- Siguiendo con la forma, respecto a la curtosis, cuyo valor es de 6.58, superior a 3 (el que establece el cambio de platicúrtica < 3 a mesocúrtica = 3), por lo que se está ante una distribución leptocúrtica. Los gráficos son bastante aclarativos por sí mismos en este aspecto.

6.- La distribución no corresponde a una normal.

7.- Valores atípicos: los outliers se pueden observar en valores más allá de los bigotes del diagrama Boxplot, tanto por la parte inferior Minimum, como por la superior Maximum. Se tendrá:

Q1 = quantile(df3$conce, prob=c(0.25))
Q1
## 25% 
##   4
Q3 = quantile(df3$conce, prob=c(0.75))
Q3
## 75% 
##  28
IQR = Q3 - Q1
Minimum = Q1 - 1.5 * IQR
Minimum
## 25% 
## -32
Maximum = Q3 + 1.5 * IQR
Maximum
## 75% 
##  64

Los outliers serán por lo tanto entidades similares presentes en ese municipio menores al Minimum < 0 (-32 entidades carece de lógica) y mayores al Maximum > 64

9. Numac = Número de Accionistas

Se va a considerar numac como una variable cuantitativa discreta:

table(df3$numac)
## 
##    0    1    2    3    4    5    6    7    8    9   10   11   12   13   14   15 
## 1610 1517  662  287  175   70   30   20   11    4    4    4    1    2    3    1 
##   16   17 
##    1    1
round(prop.table(table(df3$numac)) * 100, 2)
## 
##     0     1     2     3     4     5     6     7     8     9    10    11    12 
## 36.57 34.45 15.04  6.52  3.97  1.59  0.68  0.45  0.25  0.09  0.09  0.09  0.02 
##    13    14    15    16    17 
##  0.05  0.07  0.02  0.02  0.02

Rango: de 0 a 17. Se aprecia que abundan más entidades de “pequeños accionistas” (0-2).

Se establecen una serie de descriptivos que aportarán información relevante:

psych::describe(df3$numac)
##    vars    n mean   sd median trimmed  mad min max range skew kurtosis   se
## X1    1 4403 1.23 1.54      1    0.95 1.48   0  17    17 2.83    14.83 0.02
summary(df3$numac)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   0.000   0.000   1.000   1.228   2.000  17.000

Se representa gráficamente la variable de diferentes formas con el objetivo de extraer información de alguna o de todas ellas:

plot(df3$numac, xlab = "Entidades", ylab = "Número de Accionistas", main = "Número de Accionistas (numac)")

Se realiza un gráfico de bigotes:

boxplot(df3$numac, xlab = "Entidades", ylab = "Número de Accionistas", main = "Número de Accionistas (numac)")

En ggplot:

df3 %>% 
  ggplot(aes(numac)) +
  labs(x = "Número de Accionistas", y = "") +
  geom_boxplot() + ggtitle("Número de Accionistas (numac)")

Se realiza un histograma:

hist(df3$numac, xlab = "Número de Accionistas", ylab = "Cantidad", main = "Número de Accionistas (numac)")

En ggplot:

df3 %>% 
  ggplot(aes(numac)) +
  labs(x = "Número de Accionistas", y = "Cantidad") +
  geom_histogram() + ggtitle("Número de Accionistas (numac)")
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

Como buena praxis y también para futuras posibles necesidades de análisis inferencial estadístico, se determina si el Número de Accionistas corresponde o no a una distribución normal:

shapiro.test(df3$numac)
## 
##  Shapiro-Wilk normality test
## 
## data:  df3$numac
## W = 0.72155, p-value < 2.2e-16

El valor p-value es menor a 2.2e-16 y por lo tanto < 0.05, por lo que no lo es.

Conclusiones importantes a destacar tras el análisis y estudio de la variable:

1.- Es importante tener claro desde el principo el concepto de Numac: es el número de accionistas.

2.- Centrándose en la tendencia central y fijándose en la mediana (boxplot) y en la media, se aprecian un número de accionistas, de 1 y 1.23 respectivamente, con una dispersión marcada principalmente por una desviación estándar de 1.54 accionistas.

3.- Ahondando en la dispersión, el rango es de 17 accionistas, su extremo mínimo de 0 accionistas y un máximo evidentemente como el rango, de 17 accionistas Entre el primer y el tercer cuartil (rango intercuartil) tenemos el grueso de los valores, es decir, en valores comprendidos entre 0 y 2 accionistas. Se aprecia que abundan más las entidades con pequeño número de accionistas.

4.- En lo referente a la forma, el hecho de que el sesgo o skew(ness) sea positivo (2.83) nos indica que se presenta como una distribución asimétrica positiva, es decir, con una cola extendida hacia valores positivos. Esto se aprecia también visuamente en las gráficas hilando con el punto anterior, con mayor distancia, en lo referente a valores, desde la mediana hasta los valores máximos que hacia el mínimo (cero). Es decir, existen entidades con un mayor número de accionistas.

5.- Siguiendo con la forma, respecto a la curtosis, cuyo valor es de 14.83, superior a 3 (el que establece el cambio de platicúrtica < 3 a mesocúrtica = 3), por lo que se está ante una distribución leptocúrtica. Los gráficos son bastante aclarativos por sí mismos en este aspecto.

6.- La distribución no corresponde a una normal.

7.- Valores atípicos: los outliers se pueden observar en valores más allá de los bigotes del diagrama Boxplot, tanto por la parte inferior Minimum, como por la superior Maximum. Se tendrá:

Q1 = quantile(df3$numac, prob=c(0.25))
Q1
## 25% 
##   0
Q3 = quantile(df3$numac, prob=c(0.75))
Q3
## 75% 
##   2
IQR = Q3 - Q1
Minimum = Q1 - 1.5 * IQR
Minimum
## 25% 
##  -3
Maximum = Q3 + 1.5 * IQR
Maximum
## 75% 
##   5

Los outliers serán por lo tanto el número de accionistas menores al Minimum < 0 (-3 accionistas carece de lógica) y mayores al Maximum > 5

10. Numpa = Número de Participados

Se va a considerar numpa como una variable cuantitativa discreta:

table(df3$numpa)
## 
##    0    1    2    3    4    5    6    7    8   15   20 
## 3987  262   80   42    7   14    3    4    2    1    1
round(prop.table(table(df3$numpa)) * 100, 2)
## 
##     0     1     2     3     4     5     6     7     8    15    20 
## 90.55  5.95  1.82  0.95  0.16  0.32  0.07  0.09  0.05  0.02  0.02

Rango: de 0 a 20. Se aprecia que abundan más entidades de ningún número de participados: 90.55%

Se establecen una serie de descriptivos que aportarán información relevante:

psych::describe(df3$numpa)
##    vars    n mean   sd median trimmed mad min max range  skew kurtosis   se
## X1    1 4403 0.17 0.73      0       0   0   0  20    20 10.13   184.19 0.01
summary(df3$numpa)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##  0.0000  0.0000  0.0000  0.1687  0.0000 20.0000

Se representa gráficamente la variable de diferentes formas con el objetivo de extraer información de alguna o de todas ellas:

plot(df3$numpa, xlab = "Entidades", ylab = "Número de Participados", main = "Número de Participados (numpa)")

Se realiza un gráfico de bigotes:

boxplot(df3$numpa, xlab = "Entidades", ylab = "Número de Participados", main = "Número de Participados (numpa)")

En ggplot:

df3 %>% 
  ggplot(aes(numpa)) +
  labs(x = "Número de Participados", y = "") +
  geom_boxplot() + ggtitle("Número de Participados (numpa)")

Se realiza un histograma:

hist(df3$numpa, xlab = "Número de Participados", ylab = "Cantidad", main = "Número de Participados (numpa)")

En ggplot:

df3 %>% 
  ggplot(aes(numpa)) +
  labs(x = "Número de Participados", y = "Cantidad") +
  geom_histogram() + ggtitle("Número de Participados (numpa)")
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

Como buena praxis y también para futuras posibles necesidades de análisis inferencial estadístico, se determina si el Número de Participados corresponde o no a una distribución normal:

shapiro.test(df3$numpa)
## 
##  Shapiro-Wilk normality test
## 
## data:  df3$numpa
## W = 0.23741, p-value < 2.2e-16

El valor p-value es menor a 2.2e-16 y por lo tanto < 0.05, por lo que no lo es.

Conclusiones importantes a destacar tras el análisis y estudio de la variable:

1.- Es importante tener claro desde el principo el concepto de Numpa: es el número de participados.

2.- Centrándose en la tendencia central y fijándose en la mediana (boxplot) y en la media, se aprecian un número de participados, de 0 y 0.17 respectivamente, con una dispersión marcada principalmente por una desviación estándar de 0.73 participados.

3.- Ahondando en la dispersión, el rango es de 20 participados, su extremo mínimo de 0 participados y un máximo evidentemente como el rango, de 20 participados Entre el primer y el tercer cuartil (rango intercuartil) tenemos el grueso de los valores, es decir, en el valor de 0 participados. Se aprecia que abundan más entidades de ningún número de participados.

4.- En lo referente a la forma, el hecho de que el sesgo o skew(ness) sea positivo (10.13) nos indica que se presenta como una distribución asimétrica muy positiva, es decir, con una cola extendida hacia valores positivos. Esto se aprecia también visuamente en las gráficas hilando con el punto anterior, con la distancia en lo referente a valores, desde la mediana que es cero, lógicamente hasta los valores máximos.

5.- Siguiendo con la forma, respecto a la curtosis, cuyo valor es de 184.19, muy superior a 3 (el que establece el cambio de platicúrtica < 3 a mesocúrtica = 3), por lo que se está ante una distribución extremadamente leptocúrtica. Los gráficos son bastante aclarativos por sí mismos en este aspecto.

6.- La distribución no corresponde a una normal.

7.- Valores atípicos: los outliers se pueden observar en valores más allá de los bigotes del diagrama Boxplot, tanto por la parte inferior Minimum, como por la superior Maximum. Se tendrá:

Q1 = quantile(df3$numpa, prob=c(0.25))
Q1
## 25% 
##   0
Q3 = quantile(df3$numpa, prob=c(0.75))
Q3
## 75% 
##   0
IQR = Q3 - Q1
Minimum = Q1 - 1.5 * IQR
Minimum
## 25% 
##   0
Maximum = Q3 + 1.5 * IQR
Maximum
## 75% 
##   0

Los outliers serán por lo tanto el número de participados menores al Minimum < 0 y mayores al Maximum > 0, es decir, aquellos que no sean cero

11. Numest = Número de Establecimientos por Empresa

Se va a considerar numest como una variable cuantitativa discreta:

table(df3$numest)
## 
##    1    2    3    4    5    6    7    8    9   10   11   13   14   17   34 
## 2666 1070  345  163   69   30   29   12    6    4    3    3    1    1    1
round(prop.table(table(df3$numest)) * 100, 2)
## 
##     1     2     3     4     5     6     7     8     9    10    11    13    14 
## 60.55 24.30  7.84  3.70  1.57  0.68  0.66  0.27  0.14  0.09  0.07  0.07  0.02 
##    17    34 
##  0.02  0.02

Rango: de 0 a 34. Se aprecia de que el grueso se encuentra entre 1 y 2: 84.85%

Se establecen una serie de descriptivos que aportarán información relevante:

psych::describe(df3$numest)
##    vars    n mean   sd median trimmed mad min max range skew kurtosis   se
## X1    1 4403 1.71 1.36      1    1.43   0   1  34    33 5.83     86.4 0.02
summary(df3$numest)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   1.000   1.000   1.000   1.714   2.000  34.000

Se representa gráficamente la variable de diferentes formas con el objetivo de extraer información de alguna o de todas ellas:

plot(df3$numest, xlab = "Entidades", ylab = "Número de Establecimientos por Empresa", main = "Número de Establecimientos por Empresa (numest)")

Se realiza un gráfico de bigotes:

boxplot(df3$numpa, xlab = "Entidades", ylab = "Número de Establecimientos por Empresa", main = "Número de Establecimientos por Empresa (numest)")

En ggplot:

df3 %>% 
  ggplot(aes(numest)) +
  labs(x = "Número de Establecimientos por Empresas", y = "") +
  geom_boxplot() + ggtitle("Número de Establecimientos por Empresa (numest)")

Se realiza un histograma:

hist(df3$numest, xlab = "Número de Establecimientos por Empresa", ylab = "Cantidad", main = "Número de Establecimientos por Empresa (numest)")

En ggplot:

df3 %>% 
  ggplot(aes(numest)) +
  labs(x = "Número de Establecimientos por Empresa", y = "Cantidad") +
  geom_histogram() + ggtitle("Número de Establecimientos por Empresa (numest)")
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

Como buena praxis y también para futuras posibles necesidades de análisis inferencial estadístico, se determina si el Número de Establecimientos por Empresa corresponde o no a una distribución normal:

shapiro.test(df3$numest)
## 
##  Shapiro-Wilk normality test
## 
## data:  df3$numest
## W = 0.54378, p-value < 2.2e-16

El valor p-value es menor a 2.2e-16 y por lo tanto < 0.05, por lo que no lo es.

Conclusiones importantes a destacar tras el análisis y estudio de la variable:

1.- Es importante tener claro desde el principo el concepto de Numest: es el número de establecimientos por empresa.

2.- Centrándose en la tendencia central y fijándose en la mediana (boxplot) y en la media, se aprecian un número de establecimientos por empresa, de 1 y 1.71 respectivamente, con una dispersión marcada principalmente por una desviación estándar de 1.36 establecimientos por empresa.

3.- Ahondando en la dispersión, el rango es de 33 establecimientos por empresa, su extremo mínimo de 1 establecimiento por empresa y un máximo evidentemente similar el rango, de 34 establecimientos por empresa Entre el primer y el tercer cuartil (rango intercuartil) tenemos el grueso de los valores, es decir, entre 1 y 2 establecimientos por empresa. Se aprecia que abundan más entidades con 1 o 2 establecimientos por empresa.

4.- En lo referente a la forma, el hecho de que el sesgo o skew(ness) sea positivo (5.83) nos indica que se presenta como una distribución asimétrica muy positiva, es decir, con una cola extendida hacia valores positivos. Esto se aprecia también visuamente en las gráficas hilando con el punto anterior, con la distancia en lo referente a valores, desde la mediana que es uno, lógicamente hasta los valores máximos.

5.- Siguiendo con la forma, respecto a la curtosis, cuyo valor es de 86.4, muy superior a 3 (el que establece el cambio de platicúrtica < 3 a mesocúrtica = 3), por lo que se está ante una distribución muy leptocúrtica. Los gráficos son bastante aclarativos por sí mismos en este aspecto.

6.- La distribución no corresponde a una normal.

7.- Valores atípicos: los outliers se pueden observar en valores más allá de los bigotes del diagrama Boxplot, tanto por la parte inferior Minimum, como por la superior Maximum. Se tendrá:

Q1 = quantile(df3$numest, prob=c(0.25))
Q1
## 25% 
##   1
Q3 = quantile(df3$numest, prob=c(0.75))
Q3
## 75% 
##   2
IQR = Q3 - Q1
Minimum = Q1 - 1.5 * IQR
Minimum
##  25% 
## -0.5
Maximum = Q3 + 1.5 * IQR
Maximum
## 75% 
## 3.5

Los outliers serán por lo tanto el número de establecimientos por empresa menores al Minimum < 0 (-0.5 carece de lógica) y mayores al Maximum > 3 (3.5 al ser número no entero carede de lógica)

12. Estp = Número de Establecimientos en otras Provincias

Se parte como premisa de que estp es una variable cuantitativa discreta:

table(df3$estp)
## 
##    0    1 
## 4264  139
round(prop.table(table(df3$estp)) * 100, 2)
## 
##     0     1 
## 96.84  3.16

Sin embargo, se deduce que tenemos que 0 implica que NO existen establecimientos en otras provincias y 1 que SÍ. Se está por lo tanto ante una variable categórica o cualitativa nominal. NO existen el 96.84% y SÍ existen el 3.16%.

df4 <- df3 %>% 
  mutate(
    estp = factor(estp, levels = c(0, 1), labels = c("No", "Sí"))
  )
glimpse(df4)
## Rows: 4,403
## Columns: 17
## $ PROVINCIA                 <chr> "Albacete", "Albacete", "Albacete", "Albacet~
## $ rentabieco                <dbl> 0.859980, -4.747951, -0.322200, 12.989917, 1~
## $ rentabifin                <dbl> 8.395600, -20.148327, -1.934790, 28.382090, ~
## $ endp                      <dbl> 89.75678, 76.43501, 83.34703, 54.23199, 97.3~
## $ liq                       <dbl> 1.101604, 1.308301, 0.853852, 1.577194, 1.00~
## $ PRODUCTIVIDAD             <dbl> 114.918892, 146.386673, 11.743305, 19.276188~
## $ VENTAS                    <dbl> 1269.829, 338.338, 17715.250, 20847.926, 123~
## $ `NÚMERO DE EMPLEADOS`     <dbl> 1, 1, 46, 40, 2, 54, 1, 2, 8, 2, 18, 1, 6, 4~
## $ coe                       <dbl> 0.0049253717, 0.0013123345, 0.0687133406, 0.~
## $ edad                      <dbl> 2, 8, 25, 24, 2, 40, 10, 11, 10, 15, 13, 10,~
## $ conce                     <dbl> 9, 9, 34, 34, 3, 34, 34, 34, 9, 34, 34, 34, ~
## $ numac                     <dbl> 1, 0, 3, 3, 0, 1, 1, 1, 3, 0, 4, 0, 2, 2, 0,~
## $ numpa                     <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0,~
## $ numest                    <dbl> 1, 1, 2, 2, 2, 7, 1, 1, 1, 2, 2, 1, 1, 1, 1,~
## $ estp                      <fct> No, No, No, No, No, Sí, No, No, No, No, No, ~
## $ PORCENTAJE_GASTO_CLIENTES <dbl> 90.95005, 56.73360, 96.95069, 96.30156, 94.0~
## $ coe_100                   <dbl> 0.49253717, 0.13123345, 6.87133406, 8.086426~

Se representa gráficamente la variable con el objetivo de poder visualizar esta información:

plot(df4$estp, xlab = "Establecimientos en otras Provincias", ylab = "Cantidad", main = "Establecimientos en otras Provincias (estp)")

Se realiza un histograma en ggplot:

df4 %>% 
  ggplot(aes(estp)) +
  labs(x = "Establecimientos en otras Provincias", y = "Cantidad") +
  geom_bar(stat = "count") + ggtitle("Establecimientos en otras Provincias (estp)")

Visión global

Mediante este apartado adicional, se intentará extraer alguna conclusión complementaria a las relaciones ya previamente descritas entre las variables.

Matriz de correlación para las variable numéricas.

Elimino las variables no numéricas y de momento las no originales (las añadidas a posteriori como información valiosa a partir de otra/s) para el dataframe que se utilizará para establecer dicha matriz. Se reducen el tamaño de algunos nombres de las variables renonbrándolos, para que la visualización de la matriz mejore:

dfmatrixc <- df4 %>% 
  select(-PROVINCIA, -estp, -PORCENTAJE_GASTO_CLIENTES, -coe_100) %>% 
  rename(P = PRODUCTIVIDAD, NE = `NÚMERO DE EMPLEADOS`)
glimpse(dfmatrixc)
## Rows: 4,403
## Columns: 13
## $ rentabieco <dbl> 0.859980, -4.747951, -0.322200, 12.989917, 1.460637, 1.5939~
## $ rentabifin <dbl> 8.395600, -20.148327, -1.934790, 28.382090, 55.738331, 6.79~
## $ endp       <dbl> 89.75678, 76.43501, 83.34703, 54.23199, 97.37948, 76.54884,~
## $ liq        <dbl> 1.101604, 1.308301, 0.853852, 1.577194, 1.009258, 1.261283,~
## $ P          <dbl> 114.918892, 146.386673, 11.743305, 19.276188, 36.950680, 13~
## $ VENTAS     <dbl> 1269.829, 338.338, 17715.250, 20847.926, 1238.501, 20070.99~
## $ NE         <dbl> 1, 1, 46, 40, 2, 54, 1, 2, 8, 2, 18, 1, 6, 4, 1, 123, 10, 1~
## $ coe        <dbl> 0.0049253717, 0.0013123345, 0.0687133406, 0.0808642624, 0.0~
## $ edad       <dbl> 2, 8, 25, 24, 2, 40, 10, 11, 10, 15, 13, 10, 7, 1, 4, 19, 2~
## $ conce      <dbl> 9, 9, 34, 34, 3, 34, 34, 34, 9, 34, 34, 34, 3, 34, 34, 2, 3~
## $ numac      <dbl> 1, 0, 3, 3, 0, 1, 1, 1, 3, 0, 4, 0, 2, 2, 0, 1, 0, 1, 0, 0,~
## $ numpa      <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 2, 0, 0, 0, 0,~
## $ numest     <dbl> 1, 1, 2, 2, 2, 7, 1, 1, 1, 2, 2, 1, 1, 1, 1, 8, 1, 2, 1, 1,~

Se emplea el método Spearman (varibles no normales):

dfmatrixc.cor <- cor(dfmatrixc, method = "spearman")
round(dfmatrixc.cor, digits = 1)
##            rentabieco rentabifin endp  liq    P VENTAS   NE  coe edad conce
## rentabieco        1.0        0.4 -0.5  0.4  0.2    0.2  0.2  0.2  0.1   0.0
## rentabifin        0.4        1.0  0.2 -0.1  0.2   -0.1 -0.1  0.0 -0.3   0.0
## endp             -0.5        0.2  1.0 -0.7  0.0   -0.3 -0.3 -0.3 -0.4   0.0
## liq               0.4       -0.1 -0.7  1.0  0.0    0.1  0.1  0.1  0.2   0.0
## P                 0.2        0.2  0.0  0.0  1.0    0.5  0.0  0.4 -0.1   0.2
## VENTAS            0.2       -0.1 -0.3  0.1  0.5    1.0  0.8  0.8  0.4   0.3
## NE                0.2       -0.1 -0.3  0.1  0.0    0.8  1.0  0.7  0.5   0.2
## coe               0.2        0.0 -0.3  0.1  0.4    0.8  0.7  1.0  0.4   0.1
## edad              0.1       -0.3 -0.4  0.2 -0.1    0.4  0.5  0.4  1.0   0.0
## conce             0.0        0.0  0.0  0.0  0.2    0.3  0.2  0.1  0.0   1.0
## numac             0.2       -0.1 -0.3  0.1  0.2    0.5  0.5  0.5  0.3   0.1
## numpa             0.1       -0.1 -0.2  0.1  0.1    0.3  0.3  0.3  0.3   0.1
## numest            0.1        0.0 -0.1  0.0  0.1    0.4  0.4  0.3  0.2   0.1
##            numac numpa numest
## rentabieco   0.2   0.1    0.1
## rentabifin  -0.1  -0.1    0.0
## endp        -0.3  -0.2   -0.1
## liq          0.1   0.1    0.0
## P            0.2   0.1    0.1
## VENTAS       0.5   0.3    0.4
## NE           0.5   0.3    0.4
## coe          0.5   0.3    0.3
## edad         0.3   0.3    0.2
## conce        0.1   0.1    0.1
## numac        1.0   0.3    0.3
## numpa        0.3   1.0    0.2
## numest       0.3   0.2    1.0

Se elimina la diagonal puesto que no aporta información (una variable consigo misma tiene máxima correlación de 1), y nos quedamos con la parte superior (es simétrica) para una mejor visualización. Se ordena por correlación, teniendo por una parte en color más azul las variables que presentan una mayor correlación positiva y en rojo negativa:

corrplot(dfmatrixc.cor, method = "shade", tl.col = "black", tl.srt = 45, addCoef.col = "black", order = "AOE", type = "upper", diag = F)

Para todos los valores de correlación distintos a cero se tendrá correlación, sea ésta negativa o positiva entre los valores -1 y +1, respectivamente.

Ahora bien, se aprecia que existe una alta correlación entre VENTAS y Cuota de Mercado (coe) con 0.84, entre VENTAS y NÚMERO DE EMPLEADOS con 0.81 y entre NÚMERO DE EMPLEADOS y Cuota de mercado (coe) de 0.7. A partir de ahí, una ya más baja correlación en valores en torno a 0.5, a saber: VENTAS y Número de accionistas (numac) con 0.54; NÚMERO DE EMPLEADOS y edad con 0.53; PRODUCTIVIDAD y VENTAS con 0.49; NÚMERO DE EMPLEADOS y Número de accionistas (numac) con 0.49; VENTAS y edad con 0.41 y así sucesivamente aproximándonos cada vez más a correlaciones más cercanas a cero. Se tiene además una correlación negativa elevada de -0.66 entre Endeudamiento (endp) y Liquidez (liq), a priori lógica.

VENTAS y NÚMERO DE EMPLEADOS aparecen bastante, se tendrá en cuenta o no, pero es pertinente resaltarlo en este momento ya que llama la atención.

Se representan tres de ellas a modo de ejemplo, más la de correlación negativa.

La primera, la de la máxima correlación 0.84:
dfmatrixc %>%
  ggplot(aes(VENTAS, coe)) +
  geom_point() +
  geom_smooth(method = "lm", se = F) +
  labs(x = "Ventas", y = "Cuota de mercado") +
  ggtitle("Correlación Ventas vs Cuota de mercado")
## `geom_smooth()` using formula 'y ~ x'

Una segunda de correlación en torno a 0.5 (0.54):
dfmatrixc %>%
  ggplot(aes(VENTAS, numac)) +
  geom_point() +
  geom_smooth(method = "lm", se = F) +
  labs(x = "Ventas", y = "Número de accionistas") +
  ggtitle("Correlación Ventas vs Número de accionistas")
## `geom_smooth()` using formula 'y ~ x'

Se aprecia claramente una correlación positiva entre ambas, a más ventas más empleados a menos ventas menos empleados, y viceversa. Llama la atención la gran concentración de empresas en la parte inicial de la rl, ¿o quizá no? España es un país de PYMES con el número estrella de “hasta 50 trabajadores” en el imaginario popular aunque puedan llegar por definición hasta los 250 (entra dentro de la lógica).

Una última de 0.41:
dfmatrixc %>%
  ggplot(aes(VENTAS, edad)) +
  geom_point() +
  geom_smooth(method = "lm", se = F) +
  labs(x = "Ventas", y = "Tiempo operando en el mercado") +
  ggtitle("Correlación Ventas vs Tiempo operando en el mercado")
## `geom_smooth()` using formula 'y ~ x'

Se aprecia desde la primera hasta esta última una mayor dispersión conforme el índice de correlación se va acercando a cero.

La de correlación negativa de -0.66:
dfmatrixc %>%
  ggplot(aes(endp, liq)) +
  geom_point() +
  geom_smooth(method = "lm", se = F) +
  labs(x = "Endeudamiento", y = "Liquidez") +
  ggtitle("Endeudamiento vs Liquidez")
## `geom_smooth()` using formula 'y ~ x'

A mayor endeudamieno menor liquidez.

Todos contra todos parte 1:
pairs(dfmatrixc)

Todos contra todos parte 2:
GGally::ggpairs(dfmatrixc)
## Registered S3 method overwritten by 'GGally':
##   method from   
##   +.gg   ggplot2

Ejercicio 2

Análisis del Comportamiento de las Ventas y Variables que le Afectan.

Hilando con el punto “Visión Global” del apartado anterior, se realiza la matriz de correlación para las variable numéricas, pero está vez el enfoque se situará sobre la variables VENTAS y aquellas otras variables que le puedan estar afectando.

Posteriormente a este subapartado se establecerá si la variable cualitativa nominal estp = Número de Establecimientos en otras Provincias: “No” o “Sí” afecta o no a VENTAS.

Elimino las variables no numéricas y de momento las no originales (las añadidas a posteriori como información valiosa a partir de otra/s) para el dataframe que se utilizará para establecer dicha matriz. Se reducen el tamaño de algunos nombres de las variables renonbrándolos, para que la visualización de la matriz mejore:

dfmatrixc <- df4 %>% 
  select(-PROVINCIA, -estp, -PORCENTAJE_GASTO_CLIENTES, -coe_100) %>% 
  rename(P = PRODUCTIVIDAD, NE = `NÚMERO DE EMPLEADOS`)
glimpse(dfmatrixc)
## Rows: 4,403
## Columns: 13
## $ rentabieco <dbl> 0.859980, -4.747951, -0.322200, 12.989917, 1.460637, 1.5939~
## $ rentabifin <dbl> 8.395600, -20.148327, -1.934790, 28.382090, 55.738331, 6.79~
## $ endp       <dbl> 89.75678, 76.43501, 83.34703, 54.23199, 97.37948, 76.54884,~
## $ liq        <dbl> 1.101604, 1.308301, 0.853852, 1.577194, 1.009258, 1.261283,~
## $ P          <dbl> 114.918892, 146.386673, 11.743305, 19.276188, 36.950680, 13~
## $ VENTAS     <dbl> 1269.829, 338.338, 17715.250, 20847.926, 1238.501, 20070.99~
## $ NE         <dbl> 1, 1, 46, 40, 2, 54, 1, 2, 8, 2, 18, 1, 6, 4, 1, 123, 10, 1~
## $ coe        <dbl> 0.0049253717, 0.0013123345, 0.0687133406, 0.0808642624, 0.0~
## $ edad       <dbl> 2, 8, 25, 24, 2, 40, 10, 11, 10, 15, 13, 10, 7, 1, 4, 19, 2~
## $ conce      <dbl> 9, 9, 34, 34, 3, 34, 34, 34, 9, 34, 34, 34, 3, 34, 34, 2, 3~
## $ numac      <dbl> 1, 0, 3, 3, 0, 1, 1, 1, 3, 0, 4, 0, 2, 2, 0, 1, 0, 1, 0, 0,~
## $ numpa      <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 2, 0, 0, 0, 0,~
## $ numest     <dbl> 1, 1, 2, 2, 2, 7, 1, 1, 1, 2, 2, 1, 1, 1, 1, 8, 1, 2, 1, 1,~

Se emplea el método Spearman (varibles no normales):

dfmatrixc.cor <- cor(dfmatrixc, method = "spearman")
round(dfmatrixc.cor, digits = 1)
##            rentabieco rentabifin endp  liq    P VENTAS   NE  coe edad conce
## rentabieco        1.0        0.4 -0.5  0.4  0.2    0.2  0.2  0.2  0.1   0.0
## rentabifin        0.4        1.0  0.2 -0.1  0.2   -0.1 -0.1  0.0 -0.3   0.0
## endp             -0.5        0.2  1.0 -0.7  0.0   -0.3 -0.3 -0.3 -0.4   0.0
## liq               0.4       -0.1 -0.7  1.0  0.0    0.1  0.1  0.1  0.2   0.0
## P                 0.2        0.2  0.0  0.0  1.0    0.5  0.0  0.4 -0.1   0.2
## VENTAS            0.2       -0.1 -0.3  0.1  0.5    1.0  0.8  0.8  0.4   0.3
## NE                0.2       -0.1 -0.3  0.1  0.0    0.8  1.0  0.7  0.5   0.2
## coe               0.2        0.0 -0.3  0.1  0.4    0.8  0.7  1.0  0.4   0.1
## edad              0.1       -0.3 -0.4  0.2 -0.1    0.4  0.5  0.4  1.0   0.0
## conce             0.0        0.0  0.0  0.0  0.2    0.3  0.2  0.1  0.0   1.0
## numac             0.2       -0.1 -0.3  0.1  0.2    0.5  0.5  0.5  0.3   0.1
## numpa             0.1       -0.1 -0.2  0.1  0.1    0.3  0.3  0.3  0.3   0.1
## numest            0.1        0.0 -0.1  0.0  0.1    0.4  0.4  0.3  0.2   0.1
##            numac numpa numest
## rentabieco   0.2   0.1    0.1
## rentabifin  -0.1  -0.1    0.0
## endp        -0.3  -0.2   -0.1
## liq          0.1   0.1    0.0
## P            0.2   0.1    0.1
## VENTAS       0.5   0.3    0.4
## NE           0.5   0.3    0.4
## coe          0.5   0.3    0.3
## edad         0.3   0.3    0.2
## conce        0.1   0.1    0.1
## numac        1.0   0.3    0.3
## numpa        0.3   1.0    0.2
## numest       0.3   0.2    1.0

Se elimina la diagonal puesto que no aporta información (una variable consigo misma tiene máxima correlación de 1), y nos quedamos con la parte superior (es simétrica) para una mejor visualización. Se ordena por correlación, teniendo por una parte en color más azul las variables que presentan una mayor correlación positiva y en rojo negativa:

corrplot(dfmatrixc.cor, method = "shade", tl.col = "black", tl.srt = 45, addCoef.col = "black", order = "AOE", type = "upper", diag = F)

Para todos los valores de correlación distintos a cero se tendrá correlación, sea ésta negativa o positiva entre los valores -1 y +1, respectivamente.

Como se ha comentado previamente, el enfoque se situará sobre la variable VENTAS y aquellas otras variables que le puedan estar afectando:

VENTAS:

GRUPO 1: Valores cercanos a + 1 -> Correlación Positiva Alta:

Previo a un análisis más profundo, se establece una visión general mediante la matriz de dispersión para este primer grupo de variables:

scatterplotMatrix(~ VENTAS + coe + NE, data = dfmatrixc,
                  regLine = list(col = "green",
                                 lwd = 3),
                  smooth = list(col.smooth = "red",
                                col.smooth = "blue"))

Análisis más profundo:

1.- Cuota de Mercado (coe): 0.84:

Gráficos de puntos:

cor_coef = cor(dfmatrixc$VENTAS, dfmatrixc$coe, method = "spearman")
plot(dfmatrixc$VENTAS ~ dfmatrixc$coe)
text(0.45, 65000, glue::glue("r = {round(cor_coef, 2)}"))

dfmatrixc %>%
  ggplot(aes(VENTAS, coe)) +
  geom_point() +
  geom_smooth(method = "lm", se = F) +
  labs(x = "Ventas", y = "Cuota de mercado") +
  ggtitle("Correlación Ventas vs Cuota de mercado") +
  annotate("label", x = 70000, y = 0.45, label = glue::glue("r = {round(cor_coef, 2)}"))
## `geom_smooth()` using formula 'y ~ x'

Los outliers serán, como ya se analizó en apartado anterior, cuotas de mercado mayores al Maximum > 0.026. Se pueden quitar esos outliers para analizarlo de nuevo:

dfnooutliers <- dfmatrixc %>% filter(coe < 0.027)
cor.test(dfnooutliers$VENTAS, dfnooutliers$coe, method = "spearman")
## Warning in cor.test.default(dfnooutliers$VENTAS, dfnooutliers$coe, method =
## "spearman"): Cannot compute exact p-value with ties
## 
##  Spearman's rank correlation rho
## 
## data:  dfnooutliers$VENTAS and dfnooutliers$coe
## S = 1845788131, p-value < 2.2e-16
## alternative hypothesis: true rho is not equal to 0
## sample estimates:
##       rho 
## 0.8084816

p-value < 2.2e-16 < 0.05 -> Sigue habiendo correlación (un poco menor a la con outliers, pero alta: 0.81)

Gráficos de puntos:

cor_coef = cor(dfnooutliers$VENTAS, dfnooutliers$coe, method = "spearman")
plot(dfnooutliers$VENTAS ~ dfnooutliers$coe)
text(0.025, 65000, glue::glue("r = {round(cor_coef, 2)}"))

dfnooutliers %>%
  ggplot(aes(VENTAS, coe)) +
  geom_point() +
  geom_smooth(method = "lm", se = F) +
  labs(x = "Ventas", y = "Cuota de mercado") +
  ggtitle("Ventas vs Cuota de mercado") +
  annotate("label", x = 60000, y = 0.03, label = glue::glue("r = {round(cor_coef, 2)}"))
## `geom_smooth()` using formula 'y ~ x'

Conclusión: a más cuota de mercado, más ventas: visualizando los gráficos se aprecia como si existieran subconjuntos que siguen esta tendencia, pero de manera más o menos marcada dependiendo de la inclinación de su línea de tendencia.

2.- Número de Empleados (NE): 0.81:

Gráficos de puntos:

cor_coef = cor(dfmatrixc$VENTAS, dfmatrixc$NE, method = "spearman")
plot(dfmatrixc$VENTAS ~ dfmatrixc$NE)
text(160, 75000, glue::glue("r = {round(cor_coef, 2)}"))

dfmatrixc %>%
  ggplot(aes(VENTAS, NE)) +
  geom_point() +
  geom_smooth(method = "lm", se = F) +
  labs(x = "Ventas", y = "Número de Empleados") +
  ggtitle("Ventas vs Número de Empleados") +
  annotate("label", x = 75000, y = 165, label = glue::glue("r = {round(cor_coef, 2)}"))
## `geom_smooth()` using formula 'y ~ x'

Primera conclusión: ¿se aprecia que a más empleados más ventas y a menos empleados menos ventas?. En un primer vistazo sí, pero se aprecian también tanto números de empleados altos con bajos niveles de ventas, como número de empleados bajos con altos nives de ventas. Se analizarán por lo tanto los outliers a continuación.

También llama la atención la gran concentración de empresas en la parte inicial de la rl, ¿o quizá no? España es un país de PYMES con el número estrella de “hasta 50 trabajadores” en el imaginario popular aunque puedan llegar por definición hasta los 250.

Se van a analizar los valores atípicos del número de empleados, los outliers se pueden observar en valores más allá de los bigotes del diagrama Boxplot, tanto por la parte inferior Minimum, como por la superior Maximum. Se tendrá:

Q1 = quantile(dfmatrixc$NE, prob=c(0.25))
Q1
## 25% 
##   3
Q3 = quantile(dfmatrixc$NE, prob=c(0.75))
Q3
## 75% 
##  21
IQR = Q3 - Q1
Minimum = Q1 - 1.5 * IQR
Minimum
## 25% 
## -24
Maximum = Q3 + 1.5 * IQR
Maximum
## 75% 
##  48

Los outliers serán por lo tanto el número de empleados mayores al Maximum > 48:

dfnooutliers <- dfmatrixc %>% filter(NE < 49)
cor.test(dfnooutliers$VENTAS, dfnooutliers$NE, method = "spearman")
## Warning in cor.test.default(dfnooutliers$VENTAS, dfnooutliers$NE, method =
## "spearman"): Cannot compute exact p-value with ties
## 
##  Spearman's rank correlation rho
## 
## data:  dfnooutliers$VENTAS and dfnooutliers$NE
## S = 2611721642, p-value < 2.2e-16
## alternative hypothesis: true rho is not equal to 0
## sample estimates:
##       rho 
## 0.7621755

p-value < 2.2e-16 < 0.05 -> Sigue habiendo correlación (un poco menor a la con outliers, pero alta: 0.76)

Gráficos de puntos:

cor_coef = cor(dfnooutliers$VENTAS, dfnooutliers$NE, method = "spearman")
plot(dfnooutliers$VENTAS ~ dfnooutliers$NE)
text(42, 65000, glue::glue("r = {round(cor_coef, 2)}"))

dfnooutliers %>%
  ggplot(aes(VENTAS, NE)) +
  geom_point() +
  geom_smooth(method = "lm", se = F) +
  labs(x = "Ventas", y = "Número de Empleados") +
  ggtitle("Ventas vs Número de Empleados") +
  annotate("label", x = 65000, y = 55, label = glue::glue("r = {round(cor_coef, 2)}"))
## `geom_smooth()` using formula 'y ~ x'

Conclusión: a más empleados más ventas y a menos empleados menos ventas.

GRUPO 2: Valores en torno a + 0.5 -> Correlación Positiva Media/Baja:

Previo a un análisis más profundo, se establece una visión general mediante la matriz de dispersión para este segundo grupo de variables:

scatterplotMatrix(~ VENTAS + numac + P + numest + edad, data = dfmatrixc,
                  regLine = list(col = "green",
                                 lwd = 3),
                  smooth = list(col.smooth = "red",
                                col.smooth = "blue"))

Análisis más profundo:

3.- Número de Accionistas (numac): 0.54

Gráficos de puntos:

cor_coef = cor(dfmatrixc$VENTAS, dfmatrixc$numac, method = "spearman")
plot(dfmatrixc$VENTAS ~ dfmatrixc$numac)
text(15, 65000, glue::glue("r = {round(cor_coef, 2)}"))

dfmatrixc %>%
  ggplot(aes(VENTAS, numac)) +
  geom_point() +
  geom_smooth(method = "lm", se = F) +
  labs(x = "Ventas", y = "Número de Accionistas") +
  ggtitle("Correlación Ventas vs Número de Accionistas") +
  annotate("label", x = 70000, y = 15, label = glue::glue("r = {round(cor_coef, 2)}"))
## `geom_smooth()` using formula 'y ~ x'

Los outliers serán, como ya se analizó en apartado anterior, número de accionistas mayores al Maximum > 5. Se pueden quitar esos outliers para analizarlo de nuevo:

dfnooutliers <- dfmatrixc %>% filter(numac < 6)
cor.test(dfnooutliers$VENTAS, dfnooutliers$numac, method = "spearman")
## Warning in cor.test.default(dfnooutliers$VENTAS, dfnooutliers$numac, method =
## "spearman"): Cannot compute exact p-value with ties
## 
##  Spearman's rank correlation rho
## 
## data:  dfnooutliers$VENTAS and dfnooutliers$numac
## S = 6273166988, p-value < 2.2e-16
## alternative hypothesis: true rho is not equal to 0
## sample estimates:
##       rho 
## 0.5334638

p-value < 2.2e-16 < 0.05 -> Sigue habiendo correlación (un poco menor a la con outliers: 0.53)

Gráficos de puntos:

cor_coef = cor(dfnooutliers$VENTAS, dfnooutliers$numac, method = "spearman")
plot(dfnooutliers$VENTAS ~ dfnooutliers$numac)
text(4.5, 65000, glue::glue("r = {round(cor_coef, 2)}"))

dfnooutliers %>%
  ggplot(aes(VENTAS, numac)) +
  geom_point() +
  geom_smooth(method = "lm", se = F) +
  labs(x = "Ventas", y = "Número de Accionistas") +
  ggtitle("Ventas vs Número de Accionistas") +
  annotate("label", x = 70000, y = 4.5, label = glue::glue("r = {round(cor_coef, 2)}"))
## `geom_smooth()` using formula 'y ~ x'

Conclusión: la concentración de ventas se presenta para entidades con número de hasta 5 accionistas. A partir de entidades con 6 accionistas es bastante dispersa y variada y la concentración es significativamente menor, con mayor tendencia a menores ventas en relación a las entidades de hasta 5 accionistas en las que si se evidencian casos de ventas mayores.

4.- PRODUCTIVIDAD (P): 0.49

Gráficos de puntos:

cor_coef = cor(dfmatrixc$VENTAS, dfmatrixc$P, method = "spearman")
plot(dfmatrixc$VENTAS ~ dfmatrixc$P)
text(250, 65000, glue::glue("r = {round(cor_coef, 2)}"))

dfmatrixc %>%
  ggplot(aes(VENTAS, P)) +
  geom_point() +
  geom_smooth(method = "lm", se = F) +
  labs(x = "Ventas", y = "PRODUCTIVIDAD") +
  ggtitle("Correlación Ventas vs PRODUCTIVIDAD") +
  annotate("label", x = 70000, y = 250, label = glue::glue("r = {round(cor_coef, 2)}"))
## `geom_smooth()` using formula 'y ~ x'

Los outliers serán, como ya se analizó en apartado anterior, productividades mayores al Maximum > 39.33. Se pueden quitar esos outliers para analizarlo de nuevo:

dfnooutliers <- dfmatrixc %>% filter(P < 39.34)
cor.test(dfnooutliers$VENTAS, dfnooutliers$P, method = "spearman")
## Warning in cor.test.default(dfnooutliers$VENTAS, dfnooutliers$P, method =
## "spearman"): Cannot compute exact p-value with ties
## 
##  Spearman's rank correlation rho
## 
## data:  dfnooutliers$VENTAS and dfnooutliers$P
## S = 5087511378, p-value < 2.2e-16
## alternative hypothesis: true rho is not equal to 0
## sample estimates:
##       rho 
## 0.5515454

p-value < 2.2e-16 < 0.05 -> Sigue habiendo correlación (un poco mayor a la con outliers: 0.55)

Gráficos de puntos:

cor_coef = cor(dfnooutliers$VENTAS, dfnooutliers$P, method = "spearman")
plot(dfnooutliers$VENTAS ~ dfnooutliers$P)
text(36, 65000, glue::glue("r = {round(cor_coef, 2)}"))

dfnooutliers %>%
  ggplot(aes(VENTAS, P)) +
  geom_point() +
  geom_smooth(method = "lm", se = F) +
  labs(x = "Ventas", y = "PRODUCTIVIDAD") +
  ggtitle("Ventas vs PRODUCTIVIDAD") +
  annotate("label", x = 65000, y = 36, label = glue::glue("r = {round(cor_coef, 2)}"))
## `geom_smooth()` using formula 'y ~ x'

Conclusión: el grueso de ratios de productividad se encuentra entre 5 y 20, y para dichos ratios se observa la existencia de niveles de ventas vsriados pero también los más elevados. A partir de estos valores y en concreto de entorno a 40 los outliers arrogan cifras de niveles dispersas pero contendencia a ser menores.

5.- Número de Establecimientos por Empresa (numest): 0.43

Gráficos de puntos:

cor_coef = cor(dfmatrixc$VENTAS, dfmatrixc$numest, method = "spearman")
plot(dfmatrixc$VENTAS ~ dfmatrixc$numest)
text(30, 65000, glue::glue("r = {round(cor_coef, 2)}"))

dfmatrixc %>%
  ggplot(aes(VENTAS, numest)) +
  geom_point() +
  geom_smooth(method = "lm", se = F) +
  labs(x = "Ventas", y = "Número de Establecimientos por Empresa") +
  ggtitle("Correlación Ventas vs Número de Establecimientos por Empresa") +
  annotate("label", x = 70000, y = 30, label = glue::glue("r = {round(cor_coef, 2)}"))
## `geom_smooth()` using formula 'y ~ x'

Los outliers serán, como ya se analizó en apartado anterior, número de establecimientos por empresa mayores al Maximum > 3. Se pueden quitar esos outliers para analizarlo de nuevo:

dfnooutliers <- dfmatrixc %>% filter(numest < 4)
cor.test(dfnooutliers$VENTAS, dfnooutliers$numest, method = "spearman")
## Warning in cor.test.default(dfnooutliers$VENTAS, dfnooutliers$numest, method =
## "spearman"): Cannot compute exact p-value with ties
## 
##  Spearman's rank correlation rho
## 
## data:  dfnooutliers$VENTAS and dfnooutliers$numest
## S = 7667320950, p-value < 2.2e-16
## alternative hypothesis: true rho is not equal to 0
## sample estimates:
##       rho 
## 0.3231458

p-value < 2.2e-16 < 0.05 -> Sigue habiendo correlación (menor a la con outliers: 0.32)

Gráficos de puntos:

cor_coef = cor(dfnooutliers$VENTAS, dfnooutliers$numest, method = "spearman")
plot(dfnooutliers$VENTAS ~ dfnooutliers$numest)
text(2.75, 65000, glue::glue("r = {round(cor_coef, 2)}"))

dfnooutliers %>%
  ggplot(aes(VENTAS, numest)) +
  geom_point() +
  geom_smooth(method = "lm", se = F) +
  labs(x = "Ventas", y = "Número de Establecimientos por Empresa") +
  ggtitle("Ventas vs Número de Establecimientos por Empresa") +
  annotate("label", x = 58000, y = 2.75, label = glue::glue("r = {round(cor_coef, 2)}"))
## `geom_smooth()` using formula 'y ~ x'

Conclusión: la concentración de ventas hasta unos valores medios de las mismas, se presenta para un número de establecimientos por empresa de hasta 4. A partir de 4 es bastante dispersa en cuanto a ventas y la concentración es significativamente menor.

6.- Tiempo Operando en el Mercado (edad): 0.41

Gráficos de puntos:

cor_coef = cor(dfmatrixc$VENTAS, dfmatrixc$edad, method = "spearman")
plot(dfmatrixc$VENTAS ~ dfmatrixc$edad)
text(47, 72000, glue::glue("r = {round(cor_coef, 2)}"))

dfmatrixc %>%
  ggplot(aes(VENTAS, edad)) +
  geom_point() +
  geom_smooth(method = "lm", se = F) +
  labs(x = "Ventas", y = "Tiempo Operando en el Mercado (años)") +
  ggtitle("Correlación Ventas vs Tiempo Operando en el Mercado (años)") +
  annotate("label", x = 72000, y = 47, label = glue::glue("r = {round(cor_coef, 2)}"))
## `geom_smooth()` using formula 'y ~ x'

Los outliers serán, como ya se analizó en apartado anterior, tiempo operando en el mercado mayor al Maximum > 37 años. Se pueden quitar esos outliers para analizarlo de nuevo:

dfnooutliers <- dfmatrixc %>% filter(edad < 38)
cor.test(dfnooutliers$VENTAS, dfnooutliers$edad, method = "spearman")
## Warning in cor.test.default(dfnooutliers$VENTAS, dfnooutliers$edad, method =
## "spearman"): Cannot compute exact p-value with ties
## 
##  Spearman's rank correlation rho
## 
## data:  dfnooutliers$VENTAS and dfnooutliers$edad
## S = 8113724045, p-value < 2.2e-16
## alternative hypothesis: true rho is not equal to 0
## sample estimates:
##       rho 
## 0.3961622

p-value < 2.2e-16 < 0.05 -> Sigue habiendo correlación (menor a la con outliers: 0.40)

Gráficos de puntos:

cor_coef = cor(dfnooutliers$VENTAS, dfnooutliers$edad, method = "spearman")
plot(dfnooutliers$VENTAS ~ dfnooutliers$edad)
text(35, 65000, glue::glue("r = {round(cor_coef, 2)}"))

dfnooutliers %>%
  ggplot(aes(VENTAS, edad)) +
  geom_point() +
  geom_smooth(method = "lm", se = F) +
  labs(x = "Ventas", y = "Tiempo Operando en el Mercado (años)") +
  ggtitle("Ventas vs Tiempo Operando en el Mercado (años)") +
  annotate("label", x = 70000, y = 36, label = glue::glue("r = {round(cor_coef, 2)}"))
## `geom_smooth()` using formula 'y ~ x'

Conclusión: el grueso de tiempo operando en el mercado se encuentra entre los 5 y los 18 años aproximadamente y es donde se observa la presencia de gran cantidad de valores de ventas bajos. También existen para ellos valores medios y altos, pero en menor medida. Para los outliers a partir de 37 años, hay mucha dispersión, con valores tanto bajos, medios y altos de ventas.

GRUPO 3: Valores entre 0.3 y 0.2 -> Correlación Muy Baja:

Se establece una visión general mediante la matriz de dispersión para este tercer grupo de variables:

scatterplotMatrix(~ VENTAS + numpa + endp + conce + rentabieco, data = dfmatrixc,
                  regLine = list(col = "green",
                                 lwd = 3),
                  smooth = list(col.smooth = "red",
                                col.smooth = "blue"))
## Warning in smoother(x[subs], y[subs], col = smoother.args$col[i], log.x =
## FALSE, : could not fit smooth

Y no se realiza un análisis más profundo al presentarse correlaciones muy bajas:

7.- Número de Participados (numpa): 0.33 8.- Nivel de Endeudamiento (endp): -0.28 (negativa) 9.- Entidades Similares en el Municipio (conce): 0.26 10.- Rentabilidad Económica (rentabieco): 0.24

GRUPO 4: Valores cercanos a cero -> la significancia de la correlación es cada vez menor (tendiendo a cero):

Se establece una visión general mediante la matriz de dispersión para este cuarto grupo de variables:

scatterplotMatrix(~ VENTAS + liq + rentabifin, data = dfmatrixc,
                  regLine = list(col = "green",
                                 lwd = 3),
                  smooth = list(col.smooth = "red",
                                col.smooth = "blue"))

Y no se realiza un análisis más profundo al presentarse correlaciones extremadamente bajas:

11.- Liquidez (liq): 0.14 12.- Rentabilidad Financiera (rentabifin): -0.05

VENTAS vs Número de Establecimientos en otras Provincias (estp)

Se establecerá si la variable cualitativa nominal estp = Número de Establecimientos en otras Provincias: “No” o “Sí” afecta o no a VENTAS.

Nos encontramos ante una variable cuantitativa contínua: VENTAS y otra cualitativa u categórica: estp = Número de Establecimientos en otras Provincias.

Para ver si hay asociación entre ellas y teniendo en cuenta que VENTAS presenta una distribución no normal, como ya ha sido analizado anteriormente, se empleará la U de Mann Whitney:

wilcox.test(VENTAS ~ estp, df4)
## 
##  Wilcoxon rank sum test with continuity correction
## 
## data:  VENTAS by estp
## W = 146090, p-value < 2.2e-16
## alternative hypothesis: true location shift is not equal to 0

p-value < 2.2e-16 es < 0.05 por lo que existirá asociación.

Se procede por lo tanto, a su análisis gráfico:

Como primer paso, se representa gráficamente la variable estp con el objetivo de poder visualizarla y ser conscientes de la información que pudiera aportar:

plot(df4$estp, xlab = "Establecimientos en otras Provincias", ylab = "Cantidad", main = "Establecimientos en otras Provincias (estp)")

Se realiza un histograma en ggplot:

df4 %>% 
  ggplot(aes(estp)) +
  labs(x = "Establecimientos en otras Provincias", y = "Cantidad") +
  geom_bar(stat = "count") + ggtitle("Establecimientos en otras Provincias (estp)")

table(df3$estp)
## 
##    0    1 
## 4264  139
round(prop.table(table(df3$estp)) * 100, 2)
## 
##     0     1 
## 96.84  3.16

NO existen el 96.84% de los caso y SÍ existen el 3.16% de ellos.

plot(VENTAS ~ estp, df4)

medians <- aggregate(VENTAS ~ estp, df4, median)
medians <- transform(medians, VENTAS = as.integer(VENTAS))
df4 %>%
  ggplot(aes(x = estp, y = VENTAS, fill = estp)) +
  geom_boxplot() +
  labs(x = "Establecimientos en otras Provincias", y = "Ventas") +
  ggtitle("Ventas vs Establecimientos en otras Provincias (estp)") +
  stat_summary(fun = median, colour = "darkred", geom = "point", shape = 12, size = 2, show.legend = FALSE) +
  geom_text(data = medians, aes(label = VENTAS, y = VENTAS + 3000))

Conclusiones:

1.- Existe asociación entre ventas y el que haya establecimientos en otras provincias o no.

2.- No existen establecimientos en otras provincias en el 96.84% de los casos y sí existen el 3.16% de ellos.

3.- Las ventas para los casos en los que no existen establecimientos en otras provincias presentan unas ventas mucho menores (mediana de 1488 y rango intercuartil IQR mucho más pequeño) que para los que sí (mediana de 10778 y rango intercuartil IQR mucho mayor). De hecho Q1_Sí > Mediana_No y Q3_No < Median_Sí.

¡Expándansen por las provincias! €

Ejercicio 3

Realizar una tabla de contingencia entre Ventas y Número de empleados, una vez categorizadas ambas variables, para número de empleados, por ejemplo, la utilizada a nivel Europeo, la cual divide a las empresas en Microempresas (1-9 trabajadores), Pequeña empresa (10-49 trabajadores), Mediana empresa (50-249 trabajadores) y Gran empresa (250 y más trabajadores)).

1.- Categorización:

df5 <- df4 %>% 
  select(VENTAS, `NÚMERO DE EMPLEADOS`) %>% 
  rename(V = VENTAS, NE = `NÚMERO DE EMPLEADOS`)
glimpse(df5)
## Rows: 4,403
## Columns: 2
## $ V  <dbl> 1269.829, 338.338, 17715.250, 20847.926, 1238.501, 20070.994, 272.7~
## $ NE <dbl> 1, 1, 46, 40, 2, 54, 1, 2, 8, 2, 18, 1, 6, 4, 1, 123, 10, 1, 1, 1, ~
psych::describe(df5$V)
##    vars    n    mean       sd  median trimmed     mad  min      max    range
## X1    1 4403 6648.16 11177.25 1592.14 3957.77 2087.55 4.92 77055.79 77050.87
##    skew kurtosis     se
## X1 2.81      9.1 168.45
summary(df5$V)
##     Min.  1st Qu.   Median     Mean  3rd Qu.     Max. 
##     4.92   494.89  1592.14  6648.16  7819.91 77055.79
psych::describe(df5$NE)
##    vars    n  mean    sd median trimmed  mad min max range skew kurtosis   se
## X1    1 4403 16.34 22.54      7   11.45 7.41   1 169   168  2.6     8.53 0.34
summary(df5$NE)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##    1.00    3.00    7.00   16.34   21.00  169.00

V: (4.92, 77055.79) NE: (1, 169)

Categorización estándar de una empresa por sus ventas: se denomina Microempresa a aquella cuyas ventas anuales no exceden de 150 UIT. Se denomina Pequeña Empresa a aquella cuyas ventas anuales sobrepasan las 150 UIT pero no exceden de 1700 UIT.Asimismo, la mediana empresa será la que tenga ventas anuales superiores a 1700 UIT y hasta un monto máximo de 2300 UIT. Se considera gran empresa a aquella cuyas ventas anuales son mayores a 2300 UIT.

Segun el Código Tributario, la Unidad Impositiva Tributaria (UIT) es un valor de referencia que puede ser utilizado en las normas tributarias, entre otros.

df5Categorizada <- df5 %>% 
  mutate(EMPLEADOS = case_when(NE < 10 ~ "Mi (E)",
                               NE > 9 & NE < 50 ~ "P (E)",
                               NE > 49 & NE < 250 ~ "Me (E)"),
         VENTAS = case_when(V < 151 ~ "Mi (V)",
                            V > 150 & V < 1701 ~ "P (V)",
                            V > 1700 & V < 2301 ~ "Me (V)",
                            T ~ "G (V)")
    
  )
glimpse(df5Categorizada)
## Rows: 4,403
## Columns: 4
## $ V         <dbl> 1269.829, 338.338, 17715.250, 20847.926, 1238.501, 20070.994~
## $ NE        <dbl> 1, 1, 46, 40, 2, 54, 1, 2, 8, 2, 18, 1, 6, 4, 1, 123, 10, 1,~
## $ EMPLEADOS <chr> "Mi (E)", "Mi (E)", "P (E)", "P (E)", "Mi (E)", "Me (E)", "M~
## $ VENTAS    <chr> "P (V)", "P (V)", "G (V)", "G (V)", "P (V)", "G (V)", "P (V)~

2.- Tablas de contingencia y porcentajes:

table(df5Categorizada$VENTAS, df5Categorizada$EMPLEADOS)
##         
##          Me (E) Mi (E) P (E)
##   G (V)     339    397  1219
##   Me (V)      0    138    65
##   Mi (V)      0    340     2
##   P (V)       2   1686   215
round(prop.table(table(df5Categorizada$VENTAS, df5Categorizada$EMPLEADOS)) * 100, 2)
##         
##          Me (E) Mi (E) P (E)
##   G (V)    7.70   9.02 27.69
##   Me (V)   0.00   3.13  1.48
##   Mi (V)   0.00   7.72  0.05
##   P (V)    0.05  38.29  4.88
gmodels::CrossTable(df5Categorizada$VENTAS, df5Categorizada$EMPLEADOS)
## 
##  
##    Cell Contents
## |-------------------------|
## |                       N |
## | Chi-square contribution |
## |           N / Row Total |
## |           N / Col Total |
## |         N / Table Total |
## |-------------------------|
## 
##  
## Total Observations in Table:  4403 
## 
##  
##                        | df5Categorizada$EMPLEADOS 
## df5Categorizada$VENTAS |    Me (E) |    Mi (E) |     P (E) | Row Total | 
## -----------------------|-----------|-----------|-----------|-----------|
##                  G (V) |       339 |       397 |      1219 |      1955 | 
##                        |   232.418 |   481.727 |   458.076 |           | 
##                        |     0.173 |     0.203 |     0.624 |     0.444 | 
##                        |     0.994 |     0.155 |     0.812 |           | 
##                        |     0.077 |     0.090 |     0.277 |           | 
## -----------------------|-----------|-----------|-----------|-----------|
##                 Me (V) |         0 |       138 |        65 |       203 | 
##                        |    15.722 |     3.362 |     0.255 |           | 
##                        |     0.000 |     0.680 |     0.320 |     0.046 | 
##                        |     0.000 |     0.054 |     0.043 |           | 
##                        |     0.000 |     0.031 |     0.015 |           | 
## -----------------------|-----------|-----------|-----------|-----------|
##                 Mi (V) |         0 |       340 |         2 |       342 | 
##                        |    26.487 |   100.051 |   112.623 |           | 
##                        |     0.000 |     0.994 |     0.006 |     0.078 | 
##                        |     0.000 |     0.133 |     0.001 |           | 
##                        |     0.000 |     0.077 |     0.000 |           | 
## -----------------------|-----------|-----------|-----------|-----------|
##                  P (V) |         2 |      1686 |       215 |      1903 | 
##                        |   143.409 |   302.999 |   289.994 |           | 
##                        |     0.001 |     0.886 |     0.113 |     0.432 | 
##                        |     0.006 |     0.658 |     0.143 |           | 
##                        |     0.000 |     0.383 |     0.049 |           | 
## -----------------------|-----------|-----------|-----------|-----------|
##           Column Total |       341 |      2561 |      1501 |      4403 | 
##                        |     0.077 |     0.582 |     0.341 |           | 
## -----------------------|-----------|-----------|-----------|-----------|
## 
## 

3.- Diagrama de mosaico y de barras apareadas:

mosaicplot(VENTAS ~ EMPLEADOS, data = df5Categorizada,
           main = "Ventas vs Número de Empleados", shade = TRUE, legend = TRUE)
## Warning: In mosaicplot.default(table(mf), main = main, ...) :
##  extra argument 'legend' will be disregarded

df5Categorizada %>%
  ggplot(aes(x = VENTAS, fill = EMPLEADOS)) +
  geom_bar(stat = "count", position ="dodge")

Sorprende que el criterio de definición de empresa según estándares de número de empleados (Micro, Pequeña, Mediana) tenga un nivel de coincidencia tan bajo con sus correpondientes definiciones oficiales según estándares de ventas (Micro, Pequeña, Mediana y Grande). Por ejemplo Grandes según criterio Ventas encaja con 1955 Micro + Pequeñas + Medianas según criterio Número de Empleados (¡44% de las entidades!) y Mediana según Ventas con 0 empresas Mediana según Número de Empleados. No se trata de que coincidan, sino que para que una empresa pueda realmente denominarse Microempresa, Pequeña o Mediana debe cumplir ambos requisitos de denición, tanto en número de empleados como en ventas.

Sería interesante poder ponerse en contacto con la empresa que ha suministrado estos datos para recabar más información al respecto. Quizá las ventas no estén expresadas en UIT, sino en € o en K€. No se dispone de suficiciente información, pero parece interesante realizar un último intento/análisis con algo que también pudiera parecer lógico con respecto a las ventas, que estén expresadas en K€, con los siguientes criterios:

Microempresas < 2000k€ Pequeñas > 2000k€ y < 10000k€ Medianas > 10000k€ y < 50000k€

1.- Categorización:

df5Categorizada <- df5 %>% 
  mutate(EMPLEADOS = case_when(NE < 10 ~ "Mi (E)",
                               NE > 9 & NE < 50 ~ "P (E)",
                               NE > 49 & NE < 250 ~ "Me (E)"),
         VENTAS = case_when(V < 2000 ~ "Mi (V)",
                            V > 1999 & V < 10000 ~ "P (V)",
                            V > 9999 & V < 50000 ~ "Me (V)",
                            T ~ "G (V)")
    
  )
glimpse(df5Categorizada)
## Rows: 4,403
## Columns: 4
## $ V         <dbl> 1269.829, 338.338, 17715.250, 20847.926, 1238.501, 20070.994~
## $ NE        <dbl> 1, 1, 46, 40, 2, 54, 1, 2, 8, 2, 18, 1, 6, 4, 1, 123, 10, 1,~
## $ EMPLEADOS <chr> "Mi (E)", "Mi (E)", "P (E)", "P (E)", "Mi (E)", "Me (E)", "M~
## $ VENTAS    <chr> "Mi (V)", "Mi (V)", "Me (V)", "Me (V)", "Mi (V)", "Me (V)", ~

2.- Tablas de contingencia y porcentajes:

table(df5Categorizada$VENTAS, df5Categorizada$EMPLEADOS)
##         
##          Me (E) Mi (E) P (E)
##   G (V)      66      0     4
##   Me (V)    263     27   546
##   Mi (V)      2   2106   251
##   P (V)      10    428   700
round(prop.table(table(df5Categorizada$VENTAS, df5Categorizada$EMPLEADOS)) * 100, 2)
##         
##          Me (E) Mi (E) P (E)
##   G (V)    1.50   0.00  0.09
##   Me (V)   5.97   0.61 12.40
##   Mi (V)   0.05  47.83  5.70
##   P (V)    0.23   9.72 15.90
gmodels::CrossTable(df5Categorizada$VENTAS, df5Categorizada$EMPLEADOS)
## 
##  
##    Cell Contents
## |-------------------------|
## |                       N |
## | Chi-square contribution |
## |           N / Row Total |
## |           N / Col Total |
## |         N / Table Total |
## |-------------------------|
## 
##  
## Total Observations in Table:  4403 
## 
##  
##                        | df5Categorizada$EMPLEADOS 
## df5Categorizada$VENTAS |    Me (E) |    Mi (E) |     P (E) | Row Total | 
## -----------------------|-----------|-----------|-----------|-----------|
##                  G (V) |        66 |         0 |         4 |        70 | 
##                        |   676.918 |    40.715 |    16.534 |           | 
##                        |     0.943 |     0.000 |     0.057 |     0.016 | 
##                        |     0.194 |     0.000 |     0.003 |           | 
##                        |     0.015 |     0.000 |     0.001 |           | 
## -----------------------|-----------|-----------|-----------|-----------|
##                 Me (V) |       263 |        27 |       546 |       836 | 
##                        |   607.061 |   433.758 |   239.033 |           | 
##                        |     0.315 |     0.032 |     0.653 |     0.190 | 
##                        |     0.771 |     0.011 |     0.364 |           | 
##                        |     0.060 |     0.006 |     0.124 |           | 
## -----------------------|-----------|-----------|-----------|-----------|
##                 Mi (V) |         2 |      2106 |       251 |      2359 | 
##                        |   178.720 |   392.531 |   380.533 |           | 
##                        |     0.001 |     0.893 |     0.106 |     0.536 | 
##                        |     0.006 |     0.822 |     0.167 |           | 
##                        |     0.000 |     0.478 |     0.057 |           | 
## -----------------------|-----------|-----------|-----------|-----------|
##                  P (V) |        10 |       428 |       700 |      1138 | 
##                        |    69.270 |    82.664 |   251.002 |           | 
##                        |     0.009 |     0.376 |     0.615 |     0.258 | 
##                        |     0.029 |     0.167 |     0.466 |           | 
##                        |     0.002 |     0.097 |     0.159 |           | 
## -----------------------|-----------|-----------|-----------|-----------|
##           Column Total |       341 |      2561 |      1501 |      4403 | 
##                        |     0.077 |     0.582 |     0.341 |           | 
## -----------------------|-----------|-----------|-----------|-----------|
## 
## 

3.- Diagrama de mosaico y de barras apareadas:

mosaicplot(VENTAS ~ EMPLEADOS, data = df5Categorizada,
           main = "Ventas vs Número de Empleados", shade = TRUE, legend = TRUE)
## Warning: In mosaicplot.default(table(mf), main = main, ...) :
##  extra argument 'legend' will be disregarded

df5Categorizada %>%
  ggplot(aes(x = VENTAS, fill = EMPLEADOS)) +
  geom_bar(stat = "count", position ="dodge")

Existe en este caso más coincidencia entre ambos criterios (mayor lógica a priori), así apenas 70 entidades son consideradas como Grandes según criterio de ventas (1.6%) y por ejemplo existe mucha coincidencia en Microempresas y Pequeñas según ambos criterios.

Ejercicio 4

Comparar las ventas entre Madrid y Barcelona.

VENTAS vs PROVINCIA

La simplificación facilitará el análisis: totas las provincias con su total de ventas ordenadas de mayor a menor:

dfVENTASPROVINCIAS <- df4 %>% 
  select(PROVINCIA, VENTAS)
dfVENTASPROVINCIASsum <- aggregate(dfVENTASPROVINCIAS$VENTAS, by=list(PROVINCIA = dfVENTASPROVINCIAS$PROVINCIA), FUN = sum)
dfVENTASPROVINCIASsum <- dfVENTASPROVINCIASsum %>% 
  arrange(-x)
dfVENTASPROVINCIASsum <- dfVENTASPROVINCIASsum %>%
  rename(VENTAS = x)
glimpse(dfVENTASPROVINCIASsum)
## Rows: 52
## Columns: 2
## $ PROVINCIA <chr> "Barcelona", "Madrid", "Valencia", "Alicante", "Sevilla", "M~
## $ VENTAS    <dbl> 4149530.5, 3818090.6, 1920361.1, 1337031.5, 1277234.7, 10254~

Provincia con su total de entidades ordenadas de mayor a menor puede ser útil como información:

dfPROVINCIAStotal <- dfVENTASPROVINCIAS %>% 
  group_by(PROVINCIA) %>% 
  summarise(Total_Entidades = n()) %>% 
  arrange(-Total_Entidades)
glimpse(dfPROVINCIAStotal)
## Rows: 52
## Columns: 2
## $ PROVINCIA       <chr> "Barcelona", "Madrid", "Valencia", "Alicante", "Sevill~
## $ Total_Entidades <int> 546, 473, 253, 216, 163, 134, 130, 129, 126, 108, 99, ~

Respecto a la comparativa entre las ventas entre Madrid y Barcelona se puede decir que Barcelona supera a Madrid en ventas (esto seguro que te gusta Eudald) :)) con 4149530.53 y 3818090.59 respectivamente. A nivel del estado ocupan la primera y segunda posición en ranking de ventas:

dfBCN_MDR <- head(dfVENTASPROVINCIASsum, 2)
glimpse(dfBCN_MDR)
## Rows: 2
## Columns: 2
## $ PROVINCIA <chr> "Barcelona", "Madrid"
## $ VENTAS    <dbl> 4149531, 3818091

Se representa visualmente:

dfBCN_MDR %>% 
  ggplot(aes(x = PROVINCIA, y = VENTAS, fill = PROVINCIA)) +
  geom_bar(stat = "identity") +
  theme_minimal() +
  geom_text(aes(label = round(VENTAS, 0)), vjust = 1.6, color = "black",
            position = position_dodge(0.9), size = 4.5) +
  ggtitle("Ventas en Madrid y Barcelona")

No se pide, pero me parece interesante y lógico a priori que también el número de entidades sea mayor en Barcelona que en Madrid:

head(dfPROVINCIAStotal, 2)
## # A tibble: 2 x 2
##   PROVINCIA Total_Entidades
##   <chr>               <int>
## 1 Barcelona             546
## 2 Madrid                473

Se procede a continuación a establecer una comparativa entre ambas provincias mediante gráficos de bigotes, y una serie de descriptivos que aportarán información relevante:

dfVENTASPROVINCIAS_madrid_o_bcn <- dfVENTASPROVINCIAS %>% 
  filter(PROVINCIA == "Madrid" | PROVINCIA == "Barcelona")
medians <- aggregate(VENTAS ~ PROVINCIA, dfVENTASPROVINCIAS_madrid_o_bcn, median)
medians <- transform(medians, VENTAS = as.integer(VENTAS))
dfVENTASPROVINCIAS_madrid_o_bcn %>%
  ggplot(aes(x = PROVINCIA, y = VENTAS, fill = PROVINCIA)) +
  geom_boxplot() +
  labs(x = "Provincias de Madrid y Barcelona", y = "Ventas") +
  ggtitle("Ventas vs Provincias de Madrid y Barcelona") +
  stat_summary(fun = median, colour = "darkred", geom = "point", shape = 12, size = 2, show.legend = FALSE) +
  geom_text(data = medians, aes(label = VENTAS, y = VENTAS + 3000))

Madrid:

dfVENTASPROVINCIAS_madrid <- dfVENTASPROVINCIAS_madrid_o_bcn %>% 
  filter(PROVINCIA == "Madrid")
psych::describe(dfVENTASPROVINCIAS_madrid$VENTAS)
##    vars   n    mean       sd  median trimmed     mad min      max    range skew
## X1    1 473 8072.07 13871.67 1827.71 4602.85 2505.76 5.8 73605.16 73599.35 2.56
##    kurtosis     se
## X1      6.6 637.82
summary(dfVENTASPROVINCIAS_madrid$VENTAS)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##     5.8   451.2  1827.7  8072.1  8622.3 73605.2

Barcelona:

dfVENTASPROVINCIAS_bcn <- dfVENTASPROVINCIAS_madrid_o_bcn %>% 
  filter(PROVINCIA == "Barcelona")
psych::describe(dfVENTASPROVINCIAS_bcn$VENTAS)
##    vars   n    mean       sd  median trimmed     mad  min     max    range skew
## X1    1 546 7599.87 12042.53 1855.45 4759.35 2382.38 4.92 65683.8 65678.88 2.36
##    kurtosis     se
## X1     5.73 515.37
summary(dfVENTASPROVINCIAS_bcn$VENTAS)
##     Min.  1st Qu.   Median     Mean  3rd Qu.     Max. 
##     4.92   590.37  1855.45  7599.87  9790.40 65683.80

Conclusiones adicionales: la mediana de los establecimientos es superior en Barcelona: 1855 frente a 1827. Rango intercuartil entre el tercer y el primer cuartil mayor en Barcelona que en Madrid y ambos valores mayores también en Barcelona, es decir, una mayor concentración en el grueso intercuartil. Se aprecia mayor dispersión en Madrid con valores máximos mayores a los de Barcelona, es decir, se tiene por ejemplo en Madrid un establecimiento con Ventas de 73605 frente al máximo en Barcelona de Ventas de 65684. Por lo tanto se podría apuntar de lo expuesto, que presentando Barcelona unas Ventas mayores que Madrid, es Madrid la que tienen valores más extremos y dispersos de Ventas en sus establecimientos.

Ejercicio 5

Presentación del modelo de predicción de las ventas para el siguiente año y describirla adecuadamente.

Basándonos en df4 se creará un df de trabajo al que se denominará dfmpv, dfmpv1, dfmpv2 (Modelo de Predicción de Ventas) en el que se se renombra NUMERO DE EMPLEADOS A NE, se pasa PROVINCIA a factor, se usa coe_100 en sustitución a coe por su mayor claridad, se establece la variable ACTIVO_CORRIENTE como la liquidez x las deudas (liq * endp) eliminando por lo tanto ambas variblaes implicadas: endp y liq por su evidente alta correlación y se deja presente PORCENTAJE_GASTO_CLIENTE ya que se piensa que pudiera ayudar a sacar algún tipo de conclusión, como ya se comento previavente en el “Ejercicio 1”, eliminando por lo tanto las varibles implicadas: PRODUCTIVIDAD y NE por su evidente alta correlación:

dfmpv <- df4 %>%
  rename(NE = `NÚMERO DE EMPLEADOS`) %>% 
  mutate(PROVINCIA = factor(PROVINCIA),
         ACTIVO_CORRIENTE = liq * endp)
glimpse(dfmpv)
## Rows: 4,403
## Columns: 18
## $ PROVINCIA                 <fct> Albacete, Albacete, Albacete, Albacete, Alba~
## $ rentabieco                <dbl> 0.859980, -4.747951, -0.322200, 12.989917, 1~
## $ rentabifin                <dbl> 8.395600, -20.148327, -1.934790, 28.382090, ~
## $ endp                      <dbl> 89.75678, 76.43501, 83.34703, 54.23199, 97.3~
## $ liq                       <dbl> 1.101604, 1.308301, 0.853852, 1.577194, 1.00~
## $ PRODUCTIVIDAD             <dbl> 114.918892, 146.386673, 11.743305, 19.276188~
## $ VENTAS                    <dbl> 1269.829, 338.338, 17715.250, 20847.926, 123~
## $ NE                        <dbl> 1, 1, 46, 40, 2, 54, 1, 2, 8, 2, 18, 1, 6, 4~
## $ coe                       <dbl> 0.0049253717, 0.0013123345, 0.0687133406, 0.~
## $ edad                      <dbl> 2, 8, 25, 24, 2, 40, 10, 11, 10, 15, 13, 10,~
## $ conce                     <dbl> 9, 9, 34, 34, 3, 34, 34, 34, 9, 34, 34, 34, ~
## $ numac                     <dbl> 1, 0, 3, 3, 0, 1, 1, 1, 3, 0, 4, 0, 2, 2, 0,~
## $ numpa                     <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0,~
## $ numest                    <dbl> 1, 1, 2, 2, 2, 7, 1, 1, 1, 2, 2, 1, 1, 1, 1,~
## $ estp                      <fct> No, No, No, No, No, Sí, No, No, No, No, No, ~
## $ PORCENTAJE_GASTO_CLIENTES <dbl> 90.95005, 56.73360, 96.95069, 96.30156, 94.0~
## $ coe_100                   <dbl> 0.49253717, 0.13123345, 6.87133406, 8.086426~
## $ ACTIVO_CORRIENTE          <dbl> 98.876429, 99.999992, 71.166027, 85.534369, ~
dfmpv1 <- dfmpv %>% 
  subset(select = -c(endp, liq, PRODUCTIVIDAD, NE, coe))
glimpse(dfmpv1)
## Rows: 4,403
## Columns: 13
## $ PROVINCIA                 <fct> Albacete, Albacete, Albacete, Albacete, Alba~
## $ rentabieco                <dbl> 0.859980, -4.747951, -0.322200, 12.989917, 1~
## $ rentabifin                <dbl> 8.395600, -20.148327, -1.934790, 28.382090, ~
## $ VENTAS                    <dbl> 1269.829, 338.338, 17715.250, 20847.926, 123~
## $ edad                      <dbl> 2, 8, 25, 24, 2, 40, 10, 11, 10, 15, 13, 10,~
## $ conce                     <dbl> 9, 9, 34, 34, 3, 34, 34, 34, 9, 34, 34, 34, ~
## $ numac                     <dbl> 1, 0, 3, 3, 0, 1, 1, 1, 3, 0, 4, 0, 2, 2, 0,~
## $ numpa                     <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0,~
## $ numest                    <dbl> 1, 1, 2, 2, 2, 7, 1, 1, 1, 2, 2, 1, 1, 1, 1,~
## $ estp                      <fct> No, No, No, No, No, Sí, No, No, No, No, No, ~
## $ PORCENTAJE_GASTO_CLIENTES <dbl> 90.95005, 56.73360, 96.95069, 96.30156, 94.0~
## $ coe_100                   <dbl> 0.49253717, 0.13123345, 6.87133406, 8.086426~
## $ ACTIVO_CORRIENTE          <dbl> 98.876429, 99.999992, 71.166027, 85.534369, ~

Tras este análisis y tratamiento, el conjunto de datos queda más limpio (dfmpv) para la posterior extracción de conclusiones.

Se crea un modelo simple de regresión lineal multivariante en función de todas las demás variables para predecir VENTAS:

model <- lm(VENTAS ~., dfmpv1)
summary(model)
## 
## Call:
## lm(formula = VENTAS ~ ., data = dfmpv1)
## 
## Residuals:
##    Min     1Q Median     3Q    Max 
## -93002  -3389  -1100   1648  54736 
## 
## Coefficients:
##                                  Estimate Std. Error t value Pr(>|t|)    
## (Intercept)                    -8.030e+03  1.491e+03  -5.386 7.60e-08 ***
## PROVINCIAAlbacete              -5.200e+02  1.692e+03  -0.307 0.758656    
## PROVINCIAAlicante               5.233e+03  1.410e+03   3.712 0.000208 ***
## PROVINCIAAlmería                9.118e+02  1.680e+03   0.543 0.587339    
## PROVINCIAAsturias               4.333e+03  1.538e+03   2.816 0.004880 ** 
## PROVINCIAÁvila                 -8.367e+03  2.293e+03  -3.648 0.000267 ***
## PROVINCIABadajoz                2.114e+03  1.641e+03   1.289 0.197535    
## PROVINCIABaleares               2.523e+03  1.470e+03   1.717 0.086032 .  
## PROVINCIABarcelona              6.114e+03  1.357e+03   4.506 6.77e-06 ***
## PROVINCIABurgos                 4.266e+02  1.729e+03   0.247 0.805131    
## PROVINCIACáceres               -3.372e+03  1.811e+03  -1.863 0.062594 .  
## PROVINCIACádiz                  2.572e+03  1.573e+03   1.635 0.102073    
## PROVINCIACantabria              2.094e+03  1.713e+03   1.222 0.221594    
## PROVINCIACastellón              2.034e+03  1.638e+03   1.242 0.214404    
## PROVINCIACEUTA                 -1.742e+04  2.548e+03  -6.838 9.18e-12 ***
## PROVINCIACiudad Real            7.546e+02  1.650e+03   0.457 0.647382    
## PROVINCIACórdoba                3.509e+03  1.557e+03   2.254 0.024222 *  
## PROVINCIACuenca                -5.492e+03  1.970e+03  -2.788 0.005324 ** 
## PROVINCIAGerona                 3.360e+03  1.471e+03   2.285 0.022375 *  
## PROVINCIAGranada                1.618e+03  1.622e+03   0.998 0.318400    
## PROVINCIAGuadalajara           -7.412e+03  2.166e+03  -3.422 0.000628 ***
## PROVINCIAGuipúzcoa              2.840e+03  1.629e+03   1.744 0.081218 .  
## PROVINCIAHuelva                -3.160e+02  1.835e+03  -0.172 0.863305    
## PROVINCIAHuesca                -5.675e+02  1.746e+03  -0.325 0.745192    
## PROVINCIAJaén                   2.100e+03  1.620e+03   1.296 0.194886    
## PROVINCIALa Coruña              4.051e+03  1.475e+03   2.746 0.006053 ** 
## PROVINCIALas Palmas             3.362e+03  1.540e+03   2.183 0.029078 *  
## PROVINCIALeón                   7.054e+02  1.616e+03   0.437 0.662439    
## PROVINCIALérida                 1.735e+03  1.571e+03   1.105 0.269394    
## PROVINCIALogroño                4.778e+02  1.786e+03   0.267 0.789149    
## PROVINCIALugo                   8.627e+02  1.637e+03   0.527 0.598294    
## PROVINCIAMadrid                 6.138e+03  1.378e+03   4.453 8.70e-06 ***
## PROVINCIAMálaga                 5.896e+03  1.465e+03   4.026 5.78e-05 ***
## PROVINCIAMELILLA               -2.885e+04  3.002e+03  -9.611  < 2e-16 ***
## PROVINCIAMurcia                 5.398e+03  1.499e+03   3.600 0.000322 ***
## PROVINCIANavarra                3.172e+03  1.666e+03   1.904 0.056990 .  
## PROVINCIAOrense                -2.011e+03  1.862e+03  -1.080 0.280286    
## PROVINCIAPalencia              -5.995e+03  2.166e+03  -2.768 0.005670 ** 
## PROVINCIAPontevedra             4.012e+03  1.515e+03   2.649 0.008096 ** 
## PROVINCIASalamanca             -3.232e+03  1.776e+03  -1.820 0.068843 .  
## PROVINCIASegovia               -1.328e+04  2.348e+03  -5.657 1.64e-08 ***
## PROVINCIASevilla                5.982e+03  1.440e+03   4.156 3.31e-05 ***
## PROVINCIASoria                 -1.412e+04  2.476e+03  -5.702 1.26e-08 ***
## PROVINCIASta. Cruz de Tenerife  2.950e+03  1.535e+03   1.922 0.054632 .  
## PROVINCIATarragona              3.227e+03  1.582e+03   2.041 0.041338 *  
## PROVINCIATeruel                -5.890e+03  1.970e+03  -2.990 0.002807 ** 
## PROVINCIAToledo                 2.371e+03  1.589e+03   1.493 0.135568    
## PROVINCIAValencia               6.251e+03  1.397e+03   4.474 7.87e-06 ***
## PROVINCIAValladolid             2.462e+03  1.672e+03   1.472 0.141000    
## PROVINCIAVizcaya                5.103e+03  1.513e+03   3.372 0.000753 ***
## PROVINCIAZamora                -4.927e+03  1.950e+03  -2.527 0.011541 *  
## PROVINCIAZaragoza               4.201e+03  1.547e+03   2.715 0.006648 ** 
## rentabieco                      2.590e+01  8.617e+00   3.006 0.002665 ** 
## rentabifin                      1.408e-01  1.835e+00   0.077 0.938852    
## edad                            1.369e+02  1.399e+01   9.788  < 2e-16 ***
## conce                           1.092e+01  2.689e+00   4.063 4.93e-05 ***
## numac                           4.697e+02  8.135e+01   5.774 8.30e-09 ***
## numpa                           7.270e+02  1.661e+02   4.378 1.22e-05 ***
## numest                          2.473e+03  9.457e+01  26.150  < 2e-16 ***
## estpSí                         -5.127e+01  6.935e+02  -0.074 0.941074    
## PORCENTAJE_GASTO_CLIENTES       1.598e+01  7.447e+00   2.146 0.031900 *  
## coe_100                         2.397e+03  5.514e+01  43.474  < 2e-16 ***
## ACTIVO_CORRIENTE               -3.224e-01  2.403e-01  -1.341 0.179878    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 7502 on 4340 degrees of freedom
## Multiple R-squared:  0.5558, Adjusted R-squared:  0.5495 
## F-statistic:  87.6 on 62 and 4340 DF,  p-value: < 2.2e-16

Se tiene un valor de R-squared de 0.5495, cuanto más cercano a 1 mejor, por lo que a priori con potencial de mejora. El p-value es muy pequeño < 2.2e-16, algo que es positivo. Existen variables por valores de p-value muy pequeñas y pequeñas < 0.05, siendo estas buenas para el modelo: ayuda visualmente el hecho de presentar mayor número de estrellas (sin estrella variable no relevante para el modelo). Se pueden visualizar también los valores de Estimate: cuanto mayor sean más relevantes serán esas variables y mayor valor tendrán a priori pero se tiene que tener cuidado con este hecho. Así, llaman la atención como buenas varibles para el modelo, a parte de algunas provincias en concreto, la rentabilidad económica, el tiempo que llevan operando, el número de entidades que dan el mismo servicio en el municipio, el número de accionistas y participados, el número de establecimientos por empresa, la cuota de mercado y en menor medida el porcentaje de gasto cliente que recordemos llevaba implícitos la productividad y el número de empleados.

Se va a intentar mejora el modelo pidiendo la eliminación de las varibles menos significativas: las más cercanas a 0.05 por la parte inferior o directamente superiores a 0.05, con menos estrellas o con ninguna estrella (lo previamente explicado arriba): subset selection - mejor submodelo:

library(MASS)
## 
## Attaching package: 'MASS'
## The following object is masked from 'package:dplyr':
## 
##     select
step.model <- stepAIC(model, direction = "both", trace = FALSE)
summary(step.model)
## 
## Call:
## lm(formula = VENTAS ~ PROVINCIA + rentabieco + edad + conce + 
##     numac + numpa + numest + PORCENTAJE_GASTO_CLIENTES + coe_100, 
##     data = dfmpv1)
## 
## Residuals:
##    Min     1Q Median     3Q    Max 
## -93028  -3402  -1102   1651  54757 
## 
## Coefficients:
##                                  Estimate Std. Error t value Pr(>|t|)    
## (Intercept)                     -8080.073   1489.685  -5.424 6.14e-08 ***
## PROVINCIAAlbacete                -559.140   1691.947  -0.330 0.741060    
## PROVINCIAAlicante                5230.307   1409.437   3.711 0.000209 ***
## PROVINCIAAlmería                  916.676   1679.112   0.546 0.585143    
## PROVINCIAAsturias                4337.633   1537.769   2.821 0.004813 ** 
## PROVINCIAÁvila                  -8363.616   2292.414  -3.648 0.000267 ***
## PROVINCIABadajoz                 2111.500   1640.248   1.287 0.198056    
## PROVINCIABaleares                2527.004   1468.621   1.721 0.085383 .  
## PROVINCIABarcelona               6098.528   1356.342   4.496 7.09e-06 ***
## PROVINCIABurgos                   426.052   1728.726   0.246 0.805342    
## PROVINCIACáceres                -3373.929   1809.759  -1.864 0.062347 .  
## PROVINCIACádiz                   2576.826   1571.973   1.639 0.101238    
## PROVINCIACantabria               2103.470   1712.357   1.228 0.219361    
## PROVINCIACastellón               2030.990   1637.992   1.240 0.215070    
## PROVINCIACEUTA                 -17413.819   2546.895  -6.837 9.19e-12 ***
## PROVINCIACiudad Real              755.659   1648.875   0.458 0.646769    
## PROVINCIACórdoba                 3510.921   1556.347   2.256 0.024128 *  
## PROVINCIACuenca                 -5489.060   1969.131  -2.788 0.005334 ** 
## PROVINCIAGerona                  3363.688   1469.942   2.288 0.022167 *  
## PROVINCIAGranada                 1620.254   1621.255   0.999 0.317665    
## PROVINCIAGuadalajara            -7433.372   2165.206  -3.433 0.000602 ***
## PROVINCIAGuipúzcoa               2842.402   1628.193   1.746 0.080927 .  
## PROVINCIAHuelva                  -312.225   1834.179  -0.170 0.864840    
## PROVINCIAHuesca                  -566.102   1745.959  -0.324 0.745775    
## PROVINCIAJaén                    2104.223   1619.508   1.299 0.193911    
## PROVINCIALa Coruña               4056.242   1474.506   2.751 0.005968 ** 
## PROVINCIALas Palmas              3369.091   1538.943   2.189 0.028634 *  
## PROVINCIALeón                     710.797   1615.170   0.440 0.659904    
## PROVINCIALérida                  1684.486   1570.085   1.073 0.283392    
## PROVINCIALogroño                  489.326   1785.497   0.274 0.784055    
## PROVINCIALugo                     866.453   1637.031   0.529 0.596636    
## PROVINCIAMadrid                  6143.872   1378.080   4.458 8.47e-06 ***
## PROVINCIAMálaga                  5890.834   1464.158   4.023 5.83e-05 ***
## PROVINCIAMELILLA               -28856.072   3000.978  -9.616  < 2e-16 ***
## PROVINCIAMurcia                  5395.693   1498.348   3.601 0.000320 ***
## PROVINCIANavarra                 3175.255   1665.327   1.907 0.056627 .  
## PROVINCIAOrense                 -2023.386   1861.679  -1.087 0.277159    
## PROVINCIAPalencia               -5992.112   2165.398  -2.767 0.005678 ** 
## PROVINCIAPontevedra              3998.446   1513.973   2.641 0.008295 ** 
## PROVINCIASalamanca              -3230.031   1775.688  -1.819 0.068976 .  
## PROVINCIASegovia               -13279.323   2346.356  -5.660 1.62e-08 ***
## PROVINCIASevilla                 5962.263   1439.001   4.143 3.49e-05 ***
## PROVINCIASoria                 -14112.328   2474.916  -5.702 1.26e-08 ***
## PROVINCIASta. Cruz de Tenerife   2951.762   1534.044   1.924 0.054399 .  
## PROVINCIATarragona               3224.245   1580.857   2.040 0.041455 *  
## PROVINCIATeruel                 -5882.885   1969.233  -2.987 0.002829 ** 
## PROVINCIAToledo                  2329.701   1587.766   1.467 0.142372    
## PROVINCIAValencia                6255.376   1396.222   4.480 7.65e-06 ***
## PROVINCIAValladolid              2467.241   1671.515   1.476 0.140003    
## PROVINCIAVizcaya                 5105.752   1512.905   3.375 0.000745 ***
## PROVINCIAZamora                 -4920.868   1949.410  -2.524 0.011629 *  
## PROVINCIAZaragoza                4204.082   1546.637   2.718 0.006590 ** 
## rentabieco                         25.908      8.604   3.011 0.002617 ** 
## edad                              137.218     13.872   9.892  < 2e-16 ***
## conce                              10.842      2.687   4.034 5.57e-05 ***
## numac                             471.177     81.296   5.796 7.28e-09 ***
## numpa                             726.449    165.830   4.381 1.21e-05 ***
## numest                           2472.300     90.149  27.425  < 2e-16 ***
## PORCENTAJE_GASTO_CLIENTES          16.108      7.445   2.164 0.030548 *  
## coe_100                          2397.649     55.084  43.527  < 2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 7501 on 4343 degrees of freedom
## Multiple R-squared:  0.5557, Adjusted R-squared:  0.5496 
## F-statistic: 92.05 on 59 and 4343 DF,  p-value: < 2.2e-16

No se aprecian cambios significativos en los parámetros clave. Se toma por tanto la decisión de testear df4 eliminando coe_100 y PORCENTAJE_GASTO_CLIENTES:

dfmpv2 <- df4 %>%
  subset(select = -c(coe_100, PORCENTAJE_GASTO_CLIENTES))
glimpse(dfmpv2)
## Rows: 4,403
## Columns: 15
## $ PROVINCIA             <chr> "Albacete", "Albacete", "Albacete", "Albacete", ~
## $ rentabieco            <dbl> 0.859980, -4.747951, -0.322200, 12.989917, 1.460~
## $ rentabifin            <dbl> 8.395600, -20.148327, -1.934790, 28.382090, 55.7~
## $ endp                  <dbl> 89.75678, 76.43501, 83.34703, 54.23199, 97.37948~
## $ liq                   <dbl> 1.101604, 1.308301, 0.853852, 1.577194, 1.009258~
## $ PRODUCTIVIDAD         <dbl> 114.918892, 146.386673, 11.743305, 19.276188, 36~
## $ VENTAS                <dbl> 1269.829, 338.338, 17715.250, 20847.926, 1238.50~
## $ `NÚMERO DE EMPLEADOS` <dbl> 1, 1, 46, 40, 2, 54, 1, 2, 8, 2, 18, 1, 6, 4, 1,~
## $ coe                   <dbl> 0.0049253717, 0.0013123345, 0.0687133406, 0.0808~
## $ edad                  <dbl> 2, 8, 25, 24, 2, 40, 10, 11, 10, 15, 13, 10, 7, ~
## $ conce                 <dbl> 9, 9, 34, 34, 3, 34, 34, 34, 9, 34, 34, 34, 3, 3~
## $ numac                 <dbl> 1, 0, 3, 3, 0, 1, 1, 1, 3, 0, 4, 0, 2, 2, 0, 1, ~
## $ numpa                 <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 2, ~
## $ numest                <dbl> 1, 1, 2, 2, 2, 7, 1, 1, 1, 2, 2, 1, 1, 1, 1, 8, ~
## $ estp                  <fct> No, No, No, No, No, Sí, No, No, No, No, No, No, ~
dfmpv2 <- dfmpv2 %>%
  rename(NE = `NÚMERO DE EMPLEADOS`)
glimpse(dfmpv2)
## Rows: 4,403
## Columns: 15
## $ PROVINCIA     <chr> "Albacete", "Albacete", "Albacete", "Albacete", "Albacet~
## $ rentabieco    <dbl> 0.859980, -4.747951, -0.322200, 12.989917, 1.460637, 1.5~
## $ rentabifin    <dbl> 8.395600, -20.148327, -1.934790, 28.382090, 55.738331, 6~
## $ endp          <dbl> 89.75678, 76.43501, 83.34703, 54.23199, 97.37948, 76.548~
## $ liq           <dbl> 1.101604, 1.308301, 0.853852, 1.577194, 1.009258, 1.2612~
## $ PRODUCTIVIDAD <dbl> 114.918892, 146.386673, 11.743305, 19.276188, 36.950680,~
## $ VENTAS        <dbl> 1269.829, 338.338, 17715.250, 20847.926, 1238.501, 20070~
## $ NE            <dbl> 1, 1, 46, 40, 2, 54, 1, 2, 8, 2, 18, 1, 6, 4, 1, 123, 10~
## $ coe           <dbl> 0.0049253717, 0.0013123345, 0.0687133406, 0.0808642624, ~
## $ edad          <dbl> 2, 8, 25, 24, 2, 40, 10, 11, 10, 15, 13, 10, 7, 1, 4, 19~
## $ conce         <dbl> 9, 9, 34, 34, 3, 34, 34, 34, 9, 34, 34, 34, 3, 34, 34, 2~
## $ numac         <dbl> 1, 0, 3, 3, 0, 1, 1, 1, 3, 0, 4, 0, 2, 2, 0, 1, 0, 1, 0,~
## $ numpa         <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 2, 0, 0, 0,~
## $ numest        <dbl> 1, 1, 2, 2, 2, 7, 1, 1, 1, 2, 2, 1, 1, 1, 1, 8, 1, 2, 1,~
## $ estp          <fct> No, No, No, No, No, Sí, No, No, No, No, No, No, No, No, ~
model <- lm(VENTAS ~., dfmpv2)
summary(model)
## 
## Call:
## lm(formula = VENTAS ~ ., data = dfmpv2)
## 
## Residuals:
##    Min     1Q Median     3Q    Max 
## -46194  -1469      8   1236  45132 
## 
## Coefficients:
##                                  Estimate Std. Error t value Pr(>|t|)    
## (Intercept)                    -3350.7041   842.4820  -3.977 7.09e-05 ***
## PROVINCIAAlbacete               -900.3499  1037.9027  -0.867 0.385732    
## PROVINCIAAlicante               1303.3644   865.5332   1.506 0.132178    
## PROVINCIAAlmería               -1101.4746  1030.6405  -1.069 0.285252    
## PROVINCIAAsturias                686.8855   944.1689   0.728 0.466957    
## PROVINCIAÁvila                 -2200.4930  1408.4034  -1.562 0.118266    
## PROVINCIABadajoz                -716.4891  1006.4465  -0.712 0.476565    
## PROVINCIABaleares                648.9524   901.2987   0.720 0.471552    
## PROVINCIABarcelona              1702.9858   833.3905   2.043 0.041069 *  
## PROVINCIABurgos                -1112.7618  1060.5929  -1.049 0.294150    
## PROVINCIACáceres               -1492.8704  1111.5595  -1.343 0.179329    
## PROVINCIACádiz                   -33.3055   965.3200  -0.035 0.972478    
## PROVINCIACantabria              -605.9132  1051.0129  -0.577 0.564304    
## PROVINCIACastellón               170.0064  1004.7146   0.169 0.865640    
## PROVINCIACEUTA                 -4918.0087  1568.8557  -3.135 0.001731 ** 
## PROVINCIACiudad Real            -339.8871  1011.6227  -0.336 0.736901    
## PROVINCIACórdoba                 446.6828   955.3467   0.468 0.640122    
## PROVINCIACuenca                -2255.2308  1209.0371  -1.865 0.062205 .  
## PROVINCIAGerona                  622.5211   902.2876   0.690 0.490271    
## PROVINCIAGranada                -292.5708   994.8091  -0.294 0.768697    
## PROVINCIAGuadalajara           -2060.5943  1329.5763  -1.550 0.121259    
## PROVINCIAGuipúzcoa               693.2162   998.7095   0.694 0.487649    
## PROVINCIAHuelva                 -496.6816  1125.5466  -0.441 0.659032    
## PROVINCIAHuesca                  -26.5025  1070.7062  -0.025 0.980254    
## PROVINCIAJaén                   -333.0317   993.7053  -0.335 0.737535    
## PROVINCIALa Coruña              -297.2720   906.1584  -0.328 0.742884    
## PROVINCIALas Palmas              213.8558   945.1006   0.226 0.820996    
## PROVINCIALeón                   -267.9676   991.0902  -0.270 0.786883    
## PROVINCIALérida                  476.6014   962.8840   0.495 0.620644    
## PROVINCIALogroño                 661.1249  1095.2809   0.604 0.546133    
## PROVINCIALugo                   -154.2003  1004.0017  -0.154 0.877944    
## PROVINCIAMadrid                 1109.6715   847.4038   1.309 0.190436    
## PROVINCIAMálaga                  841.0601   900.1275   0.934 0.350161    
## PROVINCIAMELILLA               -8257.3162  1856.4681  -4.448 8.89e-06 ***
## PROVINCIAMurcia                 1271.6292   920.5916   1.381 0.167253    
## PROVINCIANavarra                1234.4546  1021.6608   1.208 0.227005    
## PROVINCIAOrense                -1311.6247  1141.8938  -1.149 0.250768    
## PROVINCIAPalencia              -2699.9055  1328.6567  -2.032 0.042209 *  
## PROVINCIAPontevedra              749.4970   930.4416   0.806 0.420559    
## PROVINCIASalamanca             -1745.0095  1088.9806  -1.602 0.109134    
## PROVINCIASegovia               -4881.7639  1442.6384  -3.384 0.000721 ***
## PROVINCIASevilla                1414.2665   884.8348   1.598 0.110040    
## PROVINCIASoria                 -6655.5715  1518.5949  -4.383 1.20e-05 ***
## PROVINCIASta. Cruz de Tenerife  -469.8013   942.3346  -0.499 0.618121    
## PROVINCIATarragona               435.5615   970.5361   0.449 0.653610    
## PROVINCIATeruel                -1955.4523  1208.5565  -1.618 0.105734    
## PROVINCIAToledo                  814.9058   974.2439   0.836 0.402948    
## PROVINCIAValencia               1794.7958   858.4384   2.091 0.036607 *  
## PROVINCIAValladolid             -458.3797  1025.8604  -0.447 0.655024    
## PROVINCIAVizcaya                1141.1233   928.9297   1.228 0.219353    
## PROVINCIAZamora                -2622.6708  1195.6896  -2.193 0.028329 *  
## PROVINCIAZaragoza               1547.5199   949.0212   1.631 0.103037    
## rentabieco                        15.7126     6.0781   2.585 0.009768 ** 
## rentabifin                         0.7039     1.1298   0.623 0.533284    
## endp                               5.0026     2.3287   2.148 0.031748 *  
## liq                                6.3002    13.9875   0.450 0.652430    
## PRODUCTIVIDAD                     73.0598     3.5720  20.453  < 2e-16 ***
## NE                               391.4765     4.6599  84.009  < 2e-16 ***
## coe                            73037.4188  3909.7968  18.681  < 2e-16 ***
## edad                             -17.3602     9.1548  -1.896 0.057986 .  
## conce                              5.4984     1.6503   3.332 0.000870 ***
## numac                             59.0730    50.2982   1.174 0.240277    
## numpa                            179.8079   102.0871   1.761 0.078255 .  
## numest                           306.4183    63.5309   4.823 1.46e-06 ***
## estpSí                           308.1608   425.1939   0.725 0.468642    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 4599 on 4338 degrees of freedom
## Multiple R-squared:  0.8331, Adjusted R-squared:  0.8307 
## F-statistic: 338.5 on 64 and 4338 DF,  p-value: < 2.2e-16

Se tiene un valor de R-squared significativamente mejor, de 0.8307, cuanto más cercano a 1 mejor. El p-value es muy pequeño < 2.2e-16, algo que es positivo. Existen variables por valores de p-value muy pequeñas y pequeñas < 0.05, siendo estas buenas para el modelo: ayuda visualmente el hecho de presentar mayor número de estrellas (sin estrella variable no relevante para el modelo). Se pueden visualizar también los valores de Estimate: cuanto mayor sean más relevantes serán esas variables y mayor valor tendrán a priori pero se tiene que tener cuidado con este hecho. Así, llaman la atención como buenas varibles para el modelo, a parte de algunas provincias en concreto, la rentabilidad económica, la productividad, el número de empleados, la cuota de mercado, el número de entidades que dan el mismo servicio en el municipio, el número de establecimientos por empresa, y en menor medida el nivel de endeudamiento.

Se va a intentar mejorar el modelo pidiendo la eliminación de las varibles menos significativas: las más cercanas a 0.05 por la parte inferior o directamente superiores a 0.05, con menos estrellas o con ninguna estrella (lo previamente explicado arriba): subset selection - mejor submodelo:

step.model <- stepAIC(model, direction = "both", trace = FALSE)
summary(step.model)
## 
## Call:
## lm(formula = VENTAS ~ PROVINCIA + rentabieco + endp + PRODUCTIVIDAD + 
##     NE + coe + edad + conce + numpa + numest, data = dfmpv2)
## 
## Residuals:
##    Min     1Q Median     3Q    Max 
## -46108  -1460     -6   1237  45626 
## 
## Coefficients:
##                                 Estimate Std. Error t value Pr(>|t|)    
## (Intercept)                    -3283.486    839.683  -3.910 9.36e-05 ***
## PROVINCIAAlbacete               -875.725   1037.495  -0.844 0.398673    
## PROVINCIAAlicante               1300.410    865.290   1.503 0.132948    
## PROVINCIAAlmería               -1109.807   1030.038  -1.077 0.281342    
## PROVINCIAAsturias                692.299    943.607   0.734 0.463188    
## PROVINCIAÁvila                 -2245.642   1407.631  -1.595 0.110710    
## PROVINCIABadajoz                -653.469   1005.244  -0.650 0.515688    
## PROVINCIABaleares                646.793    900.559   0.718 0.472665    
## PROVINCIABarcelona              1701.905    833.077   2.043 0.041121 *  
## PROVINCIABurgos                -1135.703   1060.207  -1.071 0.284135    
## PROVINCIACáceres               -1497.882   1110.886  -1.348 0.177611    
## PROVINCIACádiz                   -17.706    964.288  -0.018 0.985351    
## PROVINCIACantabria              -615.928   1050.444  -0.586 0.557671    
## PROVINCIACastellón               163.402   1004.459   0.163 0.870781    
## PROVINCIACEUTA                 -4943.601   1568.246  -3.152 0.001631 ** 
## PROVINCIACiudad Real            -319.566   1010.606  -0.316 0.751856    
## PROVINCIACórdoba                 470.888    954.693   0.493 0.621871    
## PROVINCIACuenca                -2234.007   1207.751  -1.850 0.064421 .  
## PROVINCIAGerona                  600.058    901.797   0.665 0.505829    
## PROVINCIAGranada                -235.897    993.589  -0.237 0.812343    
## PROVINCIAGuadalajara           -2089.153   1329.011  -1.572 0.116032    
## PROVINCIAGuipúzcoa               703.504    998.403   0.705 0.481079    
## PROVINCIAHuelva                 -525.751   1124.823  -0.467 0.640232    
## PROVINCIAHuesca                  -25.968   1070.426  -0.024 0.980647    
## PROVINCIAJaén                   -323.997    993.064  -0.326 0.744243    
## PROVINCIALa Coruña              -249.110    904.660  -0.275 0.783050    
## PROVINCIALas Palmas              204.898    944.475   0.217 0.828263    
## PROVINCIALeón                   -238.965    990.245  -0.241 0.809319    
## PROVINCIALérida                  481.476    962.596   0.500 0.616970    
## PROVINCIALogroño                 653.921   1094.497   0.597 0.550229    
## PROVINCIALugo                   -151.762   1003.743  -0.151 0.879828    
## PROVINCIAMadrid                 1124.665    847.023   1.328 0.184319    
## PROVINCIAMálaga                  860.159    899.577   0.956 0.339033    
## PROVINCIAMELILLA               -8284.102   1855.356  -4.465 8.21e-06 ***
## PROVINCIAMurcia                 1253.928    919.907   1.363 0.172921    
## PROVINCIANavarra                1211.253   1021.190   1.186 0.235640    
## PROVINCIAOrense                -1295.163   1141.344  -1.135 0.256535    
## PROVINCIAPalencia              -2730.988   1328.011  -2.056 0.039799 *  
## PROVINCIAPontevedra              749.351    929.923   0.806 0.420391    
## PROVINCIASalamanca             -1724.092   1088.487  -1.584 0.113281    
## PROVINCIASegovia               -4916.863   1441.799  -3.410 0.000655 ***
## PROVINCIASevilla                1415.677    884.495   1.601 0.109550    
## PROVINCIASoria                 -6709.554   1517.887  -4.420 1.01e-05 ***
## PROVINCIASta. Cruz de Tenerife  -479.497    941.726  -0.509 0.610660    
## PROVINCIATarragona               437.035    970.071   0.451 0.652359    
## PROVINCIATeruel                -1979.887   1208.090  -1.639 0.101315    
## PROVINCIAToledo                  838.551    973.375   0.861 0.389017    
## PROVINCIAValencia               1786.805    857.779   2.083 0.037304 *  
## PROVINCIAValladolid             -427.416   1025.097  -0.417 0.676735    
## PROVINCIAVizcaya                1123.429    928.636   1.210 0.226436    
## PROVINCIAZamora                -2616.047   1195.324  -2.189 0.028681 *  
## PROVINCIAZaragoza               1536.002    948.694   1.619 0.105505    
## rentabieco                        15.475      6.070   2.549 0.010824 *  
## endp                               4.680      2.289   2.044 0.040990 *  
## PRODUCTIVIDAD                     73.365      3.559  20.614  < 2e-16 ***
## NE                               391.779      4.628  84.653  < 2e-16 ***
## coe                            73678.256   3881.853  18.980  < 2e-16 ***
## edad                             -16.373      9.024  -1.814 0.069693 .  
## conce                              5.529      1.649   3.352 0.000809 ***
## numpa                            196.569    101.396   1.939 0.052611 .  
## numest                           322.366     60.918   5.292 1.27e-07 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 4598 on 4342 degrees of freedom
## Multiple R-squared:  0.8331, Adjusted R-squared:  0.8307 
## F-statistic: 361.1 on 60 and 4342 DF,  p-value: < 2.2e-16

No se aprecian cambios significativos en los parámetros clave.

Se decide establecer el modelo en función de las variables relevantes o significativas para su mejora, eliminando las que no lo son: edad y numpa:

model <- lm(VENTAS ~ . - edad - numpa, dfmpv2)
summary(model)
## 
## Call:
## lm(formula = VENTAS ~ . - edad - numpa, data = dfmpv2)
## 
## Residuals:
##    Min     1Q Median     3Q    Max 
## -45278  -1498     15   1227  46081 
## 
## Coefficients:
##                                  Estimate Std. Error t value Pr(>|t|)    
## (Intercept)                    -3613.2500   830.6136  -4.350 1.39e-05 ***
## PROVINCIAAlbacete               -894.4147  1038.1202  -0.862 0.388971    
## PROVINCIAAlicante               1341.0587   865.5462   1.549 0.121364    
## PROVINCIAAlmería               -1052.3213  1030.3981  -1.021 0.307180    
## PROVINCIAAsturias                686.2082   944.5480   0.726 0.467575    
## PROVINCIAÁvila                 -2233.8197  1408.9476  -1.585 0.112936    
## PROVINCIABadajoz                -702.2537  1006.3752  -0.698 0.485337    
## PROVINCIABaleares                652.4531   901.6213   0.724 0.469323    
## PROVINCIABarcelona              1695.4489   833.7161   2.034 0.042052 *  
## PROVINCIABurgos                -1157.0183  1060.8802  -1.091 0.275500    
## PROVINCIACáceres               -1447.2263  1111.8174  -1.302 0.193096    
## PROVINCIACádiz                    29.8420   964.8746   0.031 0.975328    
## PROVINCIACantabria              -626.6343  1051.3884  -0.596 0.551202    
## PROVINCIACastellón               149.4181  1004.9344   0.149 0.881810    
## PROVINCIACEUTA                 -4977.1410  1568.9734  -3.172 0.001523 ** 
## PROVINCIACiudad Real            -333.4317  1012.0026  -0.329 0.741811    
## PROVINCIACórdoba                 466.7133   955.3843   0.489 0.625214    
## PROVINCIACuenca                -2255.5253  1209.2850  -1.865 0.062225 .  
## PROVINCIAGerona                  634.8571   902.5761   0.703 0.481855    
## PROVINCIAGranada                -250.9556   994.4101  -0.252 0.800770    
## PROVINCIAGuadalajara           -2074.2668  1330.0032  -1.560 0.118928    
## PROVINCIAGuipúzcoa               736.6265   998.9893   0.737 0.460936    
## PROVINCIAHuelva                 -488.3703  1125.8580  -0.434 0.664473    
## PROVINCIAHuesca                  -70.0003  1071.0584  -0.065 0.947893    
## PROVINCIAJaén                   -292.7274   993.7887  -0.295 0.768346    
## PROVINCIALa Coruña              -264.2002   906.3323  -0.292 0.770679    
## PROVINCIALas Palmas              309.9472   944.0681   0.328 0.742693    
## PROVINCIALeón                   -274.1665   991.4954  -0.277 0.782163    
## PROVINCIALérida                  434.6536   963.1668   0.451 0.651814    
## PROVINCIALogroño                 681.8760  1095.7583   0.622 0.533786    
## PROVINCIALugo                   -158.9042  1004.4464  -0.158 0.874306    
## PROVINCIAMadrid                 1145.5092   847.2821   1.352 0.176452    
## PROVINCIAMálaga                  883.8496   899.9049   0.982 0.326076    
## PROVINCIAMELILLA               -8426.0356  1855.9158  -4.540 5.78e-06 ***
## PROVINCIAMurcia                 1286.5564   920.8584   1.397 0.162447    
## PROVINCIANavarra                1264.5924  1021.9673   1.237 0.216002    
## PROVINCIAOrense                -1329.5756  1142.3951  -1.164 0.244549    
## PROVINCIAPalencia              -2646.2603  1329.0318  -1.991 0.046530 *  
## PROVINCIAPontevedra              787.6824   930.7330   0.846 0.397430    
## PROVINCIASalamanca             -1738.6451  1089.3069  -1.596 0.110539    
## PROVINCIASegovia               -4875.0293  1442.4875  -3.380 0.000732 ***
## PROVINCIASevilla                1478.8863   884.8528   1.671 0.094727 .  
## PROVINCIASoria                 -6708.1677  1518.7150  -4.417 1.03e-05 ***
## PROVINCIASta. Cruz de Tenerife  -370.8507   941.7874  -0.394 0.693768    
## PROVINCIATarragona               442.5091   970.8756   0.456 0.648568    
## PROVINCIATeruel                -1971.6468  1208.7618  -1.631 0.102936    
## PROVINCIAToledo                  809.6093   974.3866   0.831 0.406081    
## PROVINCIAValencia               1812.6465   858.8065   2.111 0.034859 *  
## PROVINCIAValladolid             -428.8156  1025.8342  -0.418 0.675956    
## PROVINCIAVizcaya                1179.5352   929.1453   1.269 0.204337    
## PROVINCIAZamora                -2571.6038  1195.5701  -2.151 0.031536 *  
## PROVINCIAZaragoza               1571.2886   949.4015   1.655 0.097991 .  
## rentabieco                        15.8415     6.0750   2.608 0.009148 ** 
## rentabifin                         0.8754     1.1259   0.778 0.436894    
## endp                               5.6812     2.2841   2.487 0.012908 *  
## liq                                6.3075    13.9837   0.451 0.651969    
## PRODUCTIVIDAD                     74.0274     3.5372  20.928  < 2e-16 ***
## NE                               390.1246     4.5219  86.274  < 2e-16 ***
## coe                            73066.1365  3891.0215  18.778  < 2e-16 ***
## conce                              5.4924     1.6506   3.327 0.000884 ***
## numac                             54.9782    49.5025   1.111 0.266795    
## numest                           313.6327    63.4061   4.946 7.85e-07 ***
## estpSí                           352.0494   424.8505   0.829 0.407352    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 4601 on 4340 degrees of freedom
## Multiple R-squared:  0.8329, Adjusted R-squared:  0.8305 
## F-statistic: 348.9 on 62 and 4340 DF,  p-value: < 2.2e-16

No se aprecian cambios significativos en los parámetros clave.

Se va a intentar mejorar de nuevo el modelo pidiendo la eliminación de las varibles menos significativas: las más cercanas a 0.05 por la parte inferior o directamente superiores a 0.05, con menos estrellas o con ninguna estrella (lo previamente explicado arriba): subset selection - mejor submodelo:

step.model <- stepAIC(model, direction = "both", trace = FALSE)
summary(step.model)
## 
## Call:
## lm(formula = VENTAS ~ PROVINCIA + rentabieco + endp + PRODUCTIVIDAD + 
##     NE + coe + conce + numest, data = dfmpv2)
## 
## Residuals:
##    Min     1Q Median     3Q    Max 
## -45209  -1481      9   1235  46691 
## 
## Coefficients:
##                                 Estimate Std. Error t value Pr(>|t|)    
## (Intercept)                    -3532.149    826.554  -4.273 1.97e-05 ***
## PROVINCIAAlbacete               -874.165   1037.798  -0.842 0.399652    
## PROVINCIAAlicante               1333.453    865.329   1.541 0.123395    
## PROVINCIAAlmería               -1069.181   1029.838  -1.038 0.299234    
## PROVINCIAAsturias                686.995    944.027   0.728 0.466819    
## PROVINCIAÁvila                 -2288.063   1408.179  -1.625 0.104270    
## PROVINCIABadajoz                -644.773   1005.388  -0.641 0.521350    
## PROVINCIABaleares                645.405    900.912   0.716 0.473789    
## PROVINCIABarcelona              1690.582    833.428   2.028 0.042573 *  
## PROVINCIABurgos                -1186.116   1060.497  -1.118 0.263436    
## PROVINCIACáceres               -1457.546   1111.199  -1.312 0.189695    
## PROVINCIACádiz                    38.383    963.934   0.040 0.968239    
## PROVINCIACantabria              -641.025   1050.826  -0.610 0.541881    
## PROVINCIACastellón               138.172   1004.675   0.138 0.890619    
## PROVINCIACEUTA                 -5015.335   1568.360  -3.198 0.001395 ** 
## PROVINCIACiudad Real            -318.772   1011.057  -0.315 0.752559    
## PROVINCIACórdoba                 483.034    954.890   0.506 0.612986    
## PROVINCIACuenca                -2237.798   1208.017  -1.852 0.064028 .  
## PROVINCIAGerona                  606.329    902.104   0.672 0.501538    
## PROVINCIAGranada                -201.661    993.476  -0.203 0.839156    
## PROVINCIAGuadalajara           -2108.799   1329.407  -1.586 0.112751    
## PROVINCIAGuipúzcoa               746.474    998.708   0.747 0.454838    
## PROVINCIAHuelva                 -525.706   1125.144  -0.467 0.640356    
## PROVINCIAHuesca                  -69.658   1070.809  -0.065 0.948135    
## PROVINCIAJaén                   -290.583    993.252  -0.293 0.769875    
## PROVINCIALa Coruña              -220.647    904.967  -0.244 0.807383    
## PROVINCIALas Palmas              295.851    943.332   0.314 0.753822    
## PROVINCIALeón                   -249.231    990.707  -0.252 0.801386    
## PROVINCIALérida                  438.132    962.904   0.455 0.649124    
## PROVINCIALogroño                 671.664   1095.011   0.613 0.539654    
## PROVINCIALugo                   -158.651   1004.218  -0.158 0.874476    
## PROVINCIAMadrid                 1155.374    846.972   1.364 0.172599    
## PROVINCIAMálaga                  897.748    899.415   0.998 0.318264    
## PROVINCIAMELILLA               -8453.045   1854.825  -4.557 5.32e-06 ***
## PROVINCIAMurcia                 1263.836    920.168   1.373 0.169673    
## PROVINCIANavarra                1235.676   1021.528   1.210 0.226485    
## PROVINCIAOrense                -1313.147   1141.877  -1.150 0.250211    
## PROVINCIAPalencia              -2679.417   1328.361  -2.017 0.043748 *  
## PROVINCIAPontevedra              782.974    930.279   0.842 0.400027    
## PROVINCIASalamanca             -1722.631   1088.888  -1.582 0.113720    
## PROVINCIASegovia               -4925.490   1441.653  -3.417 0.000640 ***
## PROVINCIASevilla                1480.324    884.540   1.674 0.094291 .  
## PROVINCIASoria                 -6773.838   1517.916  -4.463 8.30e-06 ***
## PROVINCIASta. Cruz de Tenerife  -382.864    941.185  -0.407 0.684183    
## PROVINCIATarragona               440.646    970.429   0.454 0.649799    
## PROVINCIATeruel                -2004.572   1208.275  -1.659 0.097181 .  
## PROVINCIAToledo                  824.202    973.658   0.847 0.397320    
## PROVINCIAValencia               1802.580    858.174   2.100 0.035744 *  
## PROVINCIAValladolid             -404.073   1025.189  -0.394 0.693494    
## PROVINCIAVizcaya                1158.196    928.868   1.247 0.212505    
## PROVINCIAZamora                -2572.082   1195.267  -2.152 0.031461 *  
## PROVINCIAZaragoza               1559.886    949.107   1.644 0.100346    
## rentabieco                        15.527      6.067   2.559 0.010520 *  
## endp                               5.325      2.230   2.388 0.016986 *  
## PRODUCTIVIDAD                     74.319      3.522  21.100  < 2e-16 ***
## NE                               390.551      4.464  87.492  < 2e-16 ***
## coe                            73790.644   3853.814  19.147  < 2e-16 ***
## conce                              5.531      1.650   3.353 0.000806 ***
## numest                           332.073     60.683   5.472 4.69e-08 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 4601 on 4344 degrees of freedom
## Multiple R-squared:  0.8328, Adjusted R-squared:  0.8306 
## F-statistic: 373.1 on 58 and 4344 DF,  p-value: < 2.2e-16

No se aprecian cambios significativos en los parámetros clave: se detiene el proceso de intento de mejora en este punto y se concluye hasta aquí que se tienen como buenas varibles para el modelo, a parte de algunas provincias en concreto (Melilla, Segovia, Soria, Ceuta y en menor medida Valencia, Zamora, Barcelona y Palencia), la productividad, el número de empleados, la cuota de mercado, el número de entidades que dan el mismo servicio en el municipio, el número de establecimientos por empresa, y en menor medida el nivel de endeudamiento y la rentabilidad económica.

Se considera importante realizar una comprobación de los valores GVIF para asegurarse de que no existen problemas de correlación entre las variables del modelo:

car::vif(step.model)
##                   GVIF Df GVIF^(1/(2*Df))
## PROVINCIA     2.386330 51        1.008563
## rentabieco    1.375210  1        1.172694
## endp          1.419829  1        1.191566
## PRODUCTIVIDAD 1.052511  1        1.025920
## NE            2.104536  1        1.450702
## coe           2.073634  1        1.440012
## conce         1.469220  1        1.212114
## numest        1.411076  1        1.187887

Se presentan valores por encima de 5, por lo que no existen problemas de correlación entre las variables del modelo y que por lo tanto tanto ha sido una buena idea realizar una regresión lineal como que habiéndola hecho, éste es a priori buen modelo.

Se realiza la representación visual de los residuos del modelo, para saber si se podría proceder con el modelo:

plot(step.model)

Se extraen una serie de conclusiones:

1ª gráfica: no presenta una curvatura marcada excepto en la zona inicial y es relativamente recta. Bien a priori.

2ª gráfica: respecto a la normalidad en los extremos se va, ya no es recta. Ciertas sospechas. Se prosigue en el análisis.

3ª gráfica: respecto a la homocedasticidad no presenta una curvatura marcada excepto en la zona inicial y es relativamente recta. Bien a priori.

4ª gráfica: los valores no se salen de los límites. Bien a priori.

Todos los valores están dentro de los niveles relativamente seguros, por lo tanto éste es un buen modelo.

Estableciendo una relación con lo analizado y a las conclusiones a las que se llegaron tanto en el apartado Visión Global del Ejercicio 1 como en el Ejercicio 2, concuerda la correlación que presentaban las VENTAS con la cuota de mercado (0.84), el número de empleados (0.81) y la productividad (0.49) con que sean estas tres precisamente las variables que presenten mayor significancia en el modelo con un p-value muy bajo < 2e-16 y llamándo la atención el elevado estimate positivo de sobre todo la cuota de mercado (73790) lo que indica su gran peso e incidencia en las ventas. ¡Aumentemos la cuota de mercado y aumentaréis las ventas! El resto de variables significativas ya comentadas anteriormente del modelo tienen valores de estimate positivos y también influyen en la progresión de las ventas, pero se quería remarcar en especial la cuota de mercado sin desmerecer a las demás que también empujan las ventas.